i++;
if(i==20) { } }
i=0;
P1_1=!P1_1;
//20次到了吗?
2.在8051系统中,已知振荡频率是12MHz,用定时器/计数器T1实现从P1.1产生高电平宽度是10ms,低电平宽度是20ms的矩形波,试编程。
#include
void main( ) { i=0; TMOD=0x10;
//T1定时方式1,定时时间10ms
//主函数
TH0=(65536-10000)/256; TL0=(65536-10000)%6; EA=1; ET1=1; TR1=1; while(1); }
void timer1_int(void) interrupt 3 {
13
TH0=(65536-10000)/256; TL0=(65536-10000)%6; i++;
if(i==1) P1_1=0; else if(i==3) { } }
i=0; P1_1=1;
3.用8051单片机的串行口扩展并行I/O口,控制16个发光二极管依次发光,试编程。
#include
void main() {
unsigned char i,j; bit flag=1; SCON=0x00; j=0x01; for(;;) {
P1_0=0; P1_1=0; while(flag)
//主函数
//定义位变量
14
{
P1_0=0; SBUF=j; while(!TI){;} P1_0=1;TI=0;
for(i=0;i++;i<=254){;} j=j*2; if(j==0x00)
{ j=0x01; flag=0; } }
while(!flag) { { j=0x01; flag=1; } } }
P1_1=0; SBUF=j; while(!TI){;} P1_1=1;TI=0;
for(i=0;i++;i<=254){;} j=j*2; if(j==0x00)
15
}
4.用8751单片机制作一个模拟航标灯,灯接在P1.7上,INT0接光敏器件,使它具有如下功能:
(1)白天航标灯熄灭;夜间间歇发光,亮2s,灭2s ,周而复始。 (2)将INT0信号作为门控信号,启动定时器定时。 按以上要求编写控制主程序和中断服务程序。
#include
void main() { i=0; TMOD=0x09;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; while(1) { } }
//int0=1时启动定时器0
void timer0_int(void) interrupt 1
if(!P3^2)
//int0=0,白天 //P1.7置1,灯灭
P1|=0x80;
16