26 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
//中断服务程序
void time0_int(void) interrupt 1 {
TH0=0xFC;TL0=0x18; P1_0=!P1_0; }
19. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。
解:
从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为00010000B(10H),初值X:
X=65536-10000=55536=1101100011110000B 则TH1=11011000B=D8H,TL1=11110000B=F0H。 定时/计数器T1采用中断处理方式。 汇编程序:
ORG 0000H LJMP MAIN
ORG 001BH LJMP INTT1
ORG 0100H MAIN: MOV TMOD,#10H
MOV TH1,#0D8H MOV TL1,#0F0H MOV R2,#00H SETB EA SETB ET1 SETB TR1 SJMP $
错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
INTT1:
MOV TH1,#0D8H MOV TL1,#0F0H INC R2
CJNE R2,#64H,NEXT CPL P1.1 MOV R2,#00H
NEXT:
RETI END
C语言程序:
#include
TMOD=0x10;
TH1=0xD8;TL1=0xf0; EA=1;ET1=1; i=0; TR1=1; while(1); }
void time0_int(void) interrupt 3 //中断服务程序 {
TH1=0xD8;TL1=0xf0; i++;
if (i= =100) {P1_1=! P1_1;i=0;} }
20. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为10ms,低电平宽度为20ms的矩形波。要求分别用汇编语言和C语言进行编程。
解:
27
本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时见上题。
程序如下:
ORG 0000H
28 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 LJMP MAIN
ORG 001BH LJMP INTT1
ORG 0100H MAIN: MOV TMOD,#10H
MOV TH1,#0D8H MOV TL1,#0F0H MOV R2,#00H SETB EA SETB ET1 SETB TR1 SJMP $
INTT1:
MOV TH1,#0D8H MOV TL1,#0F0H INC R2
CJNE R2,#01H,NEXT SETB P1.1 SJMP EXIT
NEXT:
CJNE R2,#02H,NEXT1 CLR P1.1 SJMP EXIT
NEXT1:CJNE R2,#03H,NEXT
SETB P1.1 MOV R2,#00
EXIT:
RETI
错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 END
C语言程序:
#include
TMOD=0x10;
TH1=0xD8;TL1=0xf0; EA=1;ET1=1; i=0; TR1=1; while(1) {
if (i= =0) {P1_1=1;} if (i= =1) {P1_1=0;} if (i= =2) {P1_1=0;} } ; }
void time0_int(void) interrupt 3 //中断服务程序 {
TH1=0xD8;TL1=0xf0; i++;
if (i= =3) {i=0;} }
29
21. 用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。
解:
采用在串口连接两个CD4094来实现,电路图如下:
8051 RXD TXD P1.0 DATA CLK DATA CLK STB STB
程序如下;
30 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 ORG 0000H LJMP MAIN
ORG 0100H
MAIN: MOV SCON,#00H MOV R4,#10H MOV R3,#00H MOV R2,#01H CLR P1.0
START:MOV A,R3
MOV SBUF,A
LOOP:
JNB TI,LOOP MOV A,R2 MOV SBUF,A
LOOP1:JNB TI,LOOP1
SETB P1.0 ACALL DELAY CLR TI CLR C MOV A,R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A CLR P1.0 DJNZ R4,START1 SJMP MAIN