单片机总复习
2s的方波,试编程。
解:
#include
sbit P1_1=P1^1; //定义位变量 unsigned char i; //定时次数
void timer0over(void); //函数声明(定时50ms函数) void main( ) //主函数 {
i=0;
TMOD=0x01; TH0=(65536-50000)/256;
//定时器T0定时50ms,方式1
TL0=(65536-50000)%6; TR0=1; //开T0 for(;;) { if(TF0) timer0over( ); } }
void timer0over(void) {
TH0=(65536-50000)/256; TL0=(65536-50000)%6; TF0=0; i++;
if(i==20) //20次到了吗? { i=0; P1_1=!P1_1; } }
8. 在8051系统中,已知振荡频率是12MHz,用定时器/计数器T1实现从P1.1产生高电平宽度是10ms,低电平宽度是20ms的矩形波,试编程。 解:
#include
void main( ) //主函数 {
i=0;
TMOD=0x10; //T1定时方式1,定时时间10ms TH0=(65536-10000)/256;
11
单片机总复习
TL0=(65536-10000)%6; EA=1; ET1=1; TR1=1; while(1); }
void timer1_int(void) interrupt 3 {
TH0=(65536-10000)/256; TL0=(65536-10000)%6; i++;
if(i==1) P1_1=0; else if(i==3) { i=0; P1_1=1; } }
9. 用单片机和内部定时器来产生矩形波,要求频率为100Hz,占空比为2:1,设单片机的时钟频率为12MHz,写出有关程序。 解:
#include
void main() {
i=0;
TMOD=0x10;
TH0=(65536-10000)/256; TL0=(65536-10000)%6; EA=1; ET1=1; TR1=1; while(1); }
void timer1_int(void) interrupt 3 {
TH0=(65536-10000)/256; TL0=(65536-10000)%6; i++;
12
单片机总复习
if(i==2) P1_1=0; else if(i==3) { i=0; P1_1=1; } }
10. 如图1-1所示,单片机P1口的P1.0和P1.1各接一个开关S1、S2,P1.4、P1.5、P1.6和P1.7各接一只发光二极管。由S1和S2的不同状态来确定哪个发光二极管被点亮,如表1-4所示。
表1-4 S1、S2与二极管的关系
S2 S1 被点亮的二极管
0 0 VD1
0 1 VD2
解:(一)程序如下: #include
char a; a=P1 /*读P1口*/ a=a&0x03; /*屏蔽高6位*/ if(a==0) P1=0x83; else if a==1 P1=0x43; else if a==2 P1=0x23; else P1=0x13; }
(二)程序如下: #include “reg51.h” void main( ) { char a; a=P1; /*读P1口*/ a=a&0x03; /*屏蔽高6位*/ switch (a) { case0:P1=0x83;break; case1:P1=0x43;break; case2:P1=0x23;break;
13
1 1 0 1 VD3 VD4 单片机总复习
case3:P1=0x13; } }
11. 外部中断0引脚(P3.2)接一个开关,P1.0接一个发光二极管。开关闭合一次,发光二
极管改变一次状态,试编程。
解:程序如下: #include “reg51.h” #include “intrins.h” void delay(void) { int a=5000; while(a--)_nop_(); } void int_srv(void)interrupt 0 using 1
{ delay(); if(INT0==0) {P10=!P10;while(INT0==0);} }
void main() { P10=0; EA=1; EX0=1;while(1); }
12. 让接在P1.0引脚上的LED发光,试编程。 解:程序如下: include
13. 让接在P1.0引脚上的LED闪烁发光,试编程。 解:程序如下: #include\
#define uchar unsigned char #define uint unsigned int sbit P1_0=P1^0;
/*延时程序,有Delay参数确定延迟时间*/ void mdelay(uint Delay) { uint i;
for(;Delay>0;Delay--)
14
单片机总复习
{ for(i=0;i<124;i++) {;} } }
void main() { for(;;) { P1_0=!P1_0; //取反P1.0引脚 mdelay(10000); } }
13. MCS-51单片机扩展一片2716存储器,画出系统电路原理图,写出地址分布。 答:
P0.0 . . P0.7 8031 ALE
P2.0 P2.1 P2.2 P2.7 PSEN D0 .
. 74LS373 D7 G
Q0 . . Q7 OE A1 . . A7 D0 . . D7 2716 (2K)
A8 A9 A10 CE OE
程序存储器的地址范围为:0000H~07FFH 14. 已知如图所示电路,请回答: (1) ADC0809的口地址为_______。 (2) EOC的作用是_______。
答:(1) ADC0809口地址为7FF0H~7FF7H(或7FF8~7FFFH)
(2) EOC为A/D转换结束信号,用来引起中断或查询,以便读取A/D的转换结果。
15. 阅读下列硬件图,补齐连接线 ,并回答问题 :
15