单片机C语言实验题.docx
文本预览下载声明
一编写并调试一个双字节无符号十进制数加法程序。其功能为将被加数写入30H、31H单元,加数写入40H、41H单元,运行程序结果写入50H、51H、52H单元中,加法程序功能为:(30H)(31H)+(40H)(41H)=(50H)(51H)(52H)(都是高位在前、低位在后)。#includec8051f020.h#includestdio.h#include intrins.hunsigned 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; //标志位0sbit BB1 = BZW^1; //标志位1sbit BB2 = BZW^2; //标志位2unsigned 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 (ee02) BB0=1; //察看20h 位0 if (ee1=5) BB1=1; //察看20h 位1 if (ee29) BB2=1; //察看20h 位2 for(i=0,k=0x55;i5;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口显示分钟
显示全部