uchar a;
void main(void) {
TMOD=0X01; TL0=0XB0; TH0=0X3C; EA=1; ET0=1; TR0=1; while(1) { if(a==100) { EA=0; TR0=0; } } }
void timer0(void) interrupt 1 {
TL0=0XB0; TH0=0X3C; cpl p1.0; a++; }
5、 甲单片机利用方式1将内部RAM30H~37H单元的ASCII码发送到乙
机。编制甲机发送和乙机接收的程序(加奇校验)。 A机发送程序设计 ST:
MOV TMOD,#20H MOV TL1,#0E8H MOV TH1,#0E8H SETB TR1
MOV SCON ,#50H
MOV R0,#30H MOV R1,#08H LOOP:
MOV A,@R0 CALL FS INC R0
DJNZ R1,LOOP RET FS:
MOV C,P CPL C
MOV ACC.7,C MOV SBUF A WAIT:
JNB TI,WAIT CLR TI RET
B机的接受程序设计
接受串口发来的程序,假设存放在30H—37H中 ST:
MOV TMOD,#20H MOV TL1,#0E8H MOV TH1,#0E8H SETB TR1
MOV SCON ,#50H MOV R0,#30H MOV R1,#08H LOOP: CALL JS JNC ERROR MOV @R0,A INC R0
DJNZ R1,LOOP RET
ERROR:………;出错处理,如返回出错信息等 RET JS:
JNB RI JS CLR RI
MOV A, SBUF MOV P C ANL A,#7FH RET
6、 试用8031和8155实现键盘和LED动态显示。画出原理示意图并编制
键盘扫描程序和LED动态显示程序(16个键的键盘扫描和6位LED显示)。 键盘扫描子程序: #include
#define uchar unsigned char #define uint unsigned int uchar num,i; uint temp;
void main(void) { while(1) { keych(); } }
void keych() { for(i=0;i<4;i++) { temp=0xfe; temp= _crol_(temp, i); P0=temp; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay();
if((P0&0xf0)!=0xf0) { switch(temp) { case 0x70: jpch; break; case 0xb0: jpch; break; case 0xd0: jpch; break; case 0xe0: jpch; break; } } } } }
Void jpch(void) {
…..//按键扫描处理程序 }
LED动态扫描子程序 假设各端口都已初始化 #include
Unsigned char duanx[]={0x3f,0x06,0x5b,0x4f,0x66,0xbd} Unsigned char weix[]={0x80,0x40,0x20,0x10,0x80,0x40} Void main(void)
Init();//初始化各端口 P1=0 While(1) {
Unsigned char ; For (i=0;i<6,i++)
{
P0=duanx[i]; P1++
P0=weix[i]; Delay(); P1=0; P0=0; } i=0; p1=0 }
5、利用8031和8位A/D(ADC0809)构成数据采集系统。每隔20ms采集通道0的一次数据,将采集的数据存放在30H的内部RAM中。画出原理示意图,写出较完整的程序清单。(提示:需要用定时器和外部中断)。
《单片机原理及应用》 一、 分析程序的执行结果,将结果填写到空格中。
1、 MOV 40H,#80H
MOV R0,#40H MOV A,@R0 ;(A= 80H ) MOV B,#20H
DIV AB ;(A= 04H B= 00H ) MOV @R0,A ;最终结果存于内存单元 40H 中。
2、 MOV A,#2AH RR A MOV B,A
MUL AB ;(A= B9H B= 01H )
(OV= 1 CY= 0 )