资源描述
一
编写并调试一个双字节无符号十进制数加法程序。其功能为将被加数写入30H、31H单元,
加数写入40H、41H单元,运行程序结果写入50H、51H、52H单元中,加法程序功能为:
(30H)(31H)+(40H)(41H)=(50H)(51H)(52H)(都是高位在前、低位在后)。
#include<c8051f020.h>
#include<stdio.h>
#include <intrins.h>
unsigned char a[5] _at_ 0x50;
unsigned char ww0 _at_ 0x30;
unsigned char ww1 _at_ 0x31;
unsigned char ww2 _at_ 0x32;
unsigned char ww3 _at_ 0x33;
unsigned char ww4 _at_ 0x34;
unsigned char ee0 _at_ 0x40;
unsigned char ee1 _at_ 0x41;
unsigned char ee2 _at_ 0x42;
unsigned char bdata BZW _at_ 0x20; //标志位
sbit BB0 = BZW^0; //标志位0
sbit BB1 = BZW^1; //标志位1
sbit BB2 = BZW^2; //标志位2
unsigned char xx;yy;zz;
int i,k,y,z,x;
void main()
{
ww0=0x95; //存储器窗口 察看30h
ww1=0xa6; // 察看31h
ww2=0xb7; // 察看32h
ww3=0x88; // 察看33h
ww4=0x08; // 察看34h
k=ww0+ww1+ww2+ww3+ ww4; // 观察和堆栈窗口 察看 k=282
ww4=k/4; // 察看34h =0xa0
ee0=ww4/100; //察看40h =01
xx=ww4%100; //察看 xx 观察和堆栈窗口 察看 xx=3c
ee1=xx/10; //察看41h =06
ee2=xx%10; //察看42h =00
if (ee0>2)
BB0=1; //察看20h 位0
if (ee1>=5)
BB1=1; //察看20h 位1
if (ee2<9)
BB2=1; //察看20h 位2
for(i=0,k=0x55;i<5;i++,k++)
{
a[i]=k; // 察看 存储器窗口 (50h---54h)
}
ACC=0xa0; //专用寄存器窗口 察看 A
B=0xbb; //专用寄存器窗口 察看 B
switch(ACC+1)
{
case 0xa1:
TL0=0x77;TH0=0x88; //存储器窗口 察看8ah,8ch
break;
case 0xa2:
TL0=0x33;TH0=0x44; //存储器窗口 察看8ah, 8ch
break;
default:
TL0=0x11; TH0=0x22; //存储器窗口 察看8ah, 8ch
break;
}
while(1);
}
实验二 端口的输入、输出实验
二、实验内容
本实验要求51单片机的一个I/O接4个开关,在通过另一个I/O口控制7段数码显示相应的数字。开关闭合为低电平,开关断开为高电平。四个开关的状态为二进制,编码为十六进制后分别在LED中显示为“0”到“F”。
主要器件:单片机AT89C51,共阳极数码管7SEG-COM-AN-GRN,开关SW-SPST,8排电阻RESPACK-8(RX8),阻值200欧,单个电阻RES,阻值4.7K欧。
硬件电路实现:protues,软件实现:keil
实验3 外部中断实验
二、实验内容
在INT0和INT1上分别接两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,INT1上的按钮每按下一次则计数减一。P1.0~ P1.3接LED灯,以显示计数信号。P1.0~ P1.3口也可采用七段数码管显示相应的数字。
实验4 定时器/计数器中断实验
二、实验内容
1. 用cpu内部定时器T0中断方式计时,产生周期为2s,占空比为80%的脉冲波形,显示在P1.0口。
2. 用cpu内部计数器T1,按计数模式工作,对P1.0口输出的脉冲进行计数,并显示在P2口。
实验5 定时器中断实验
二、实验内容
设计一个可预置数的时钟,共有3个LED分别显示分个位、秒十位、秒个位。要求P1口显示分钟,P2口显示秒个位,P0口显示秒十位,并可通过外部中断按钮分别进行分和秒的校时。
展开阅读全文