void main (void) {
TMOD = 0x01; //T0定时方式1 P1_0-0;
TH0 = -(1000/256); //装载计数初值 TL0 = -(1000%6); EA=1; //开总中断 ET0=1; //开T0中断 TR0=1; //启动T0 do {} while(1); }
2、采用定时中断方式,实现下图跑马灯控制功能。要求跑马灯的闪烁速率为每秒1次。P127-P130
#define uchar unsigned char //定义下一个方便后面使用 #include
uchar code ledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //跑马灯工作状态
uchar ledi; //用来指示显示顺序 TOMD=0x01; //定义T0,方式1
TH0=0x3c; //T0初值,溢出20次为1s(按12MHz晶振计算) TL0=0xb0;
TR0=1; //启动定时器 ET0=1; //打开定时器0中断 EA=1; //打开总中断 While(1){ //主程序循环
If(ldelay){ //发现有时间溢出,进入处理 ldelay=0; //清除标志
P2=ledp[ledi]; //读出一个值送到P2口 Ledi++; //指向下一个
If(ledi==8)ledi=0; //到了最后一个灯就换到第一个 } } }
//定时器0中断函数 timer0 () interrupt 1{ t++; if(t==20){ t=0;
ldelay=1; //每次溢出一个标志,以便主程序处理 }
TH0=0x3c; //重置T0初值 TL0=0xb0; }
3、编写一程序,将内部RAM中45H单元中的高4位清0,低4位置1后存回46H单元。
MOV 45H,A
ANL A, #00001111B ORL A, #00001111B MOV 46H,A END
4、实验四LED灯和数码显示器中断控制。 #include
char
led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x
58,0x5e,0x79,0x71};
sbit P0_4=P0^4; int count=0; int0_key()interrupt 0 {
P0_4=!P0_4; }
int1_key()interrupt 2 { count++; if(count>0x0f) count=0;
P2=led_mod[count]; }
void main() {
IT0=1;EX0=1;EA=1; IT1=1; EX1=1; P0_4=0; P2=0x3f; while(1); }