MOV INC JNZ MOV DEC JNZ SJMP
A,#00H @DPTR,A A UP A,#0FEH @DPTR,A A DOWN UP
UP: MOVX
DOWN: MOVX
7.16.使用8031和ADC0809芯片设计一个巡回检测系统。共有8路模拟输入,采用周期为1秒,其它条件可自定。请画出电路连接图并进行程序设计。
解:设采集的数据依次放在内部RAM以Dada开始的8个单元,电路如图7.41所示,ADC0809的CLK引脚时钟为500KHz(设单片机的时钟为6MHz),满足0809典型值范围,其转换时间约为100us,则转换8路模拟信号时间远远小于1S。现采用定时器T0工作于方式1实现定时10次100ms来实现。
定100ms的初值为:
216-100×10-3/(2×10-6)=15 536=3CB0H 程序如下:
ORG AJMP ORG AJMP ORG AJMP
0000H MAIN 000BH CT0 0013H INT1 R0,#Data R2,#08H TL0,#0B0H TH0,#3CH R3,#0AH IT1 ET0 EX1 EA
;数据存区首址 ;8路模拟信号 ;100ms定时
;循环次数
;外部中断1边沿触发 ;允许T0中断
;允许外部中断源1中断 ;CPU开中断
;启动D/A转换 ;开始计数 ;等待中断
;外部中断1入口 ;T0中断入口
;主程序: MAIN: MOV
MOV MOV MOV MOV MOV SETB SETB SETB ESTB MOV MOV MOVX SETB SLMP
TMOD,#01H ;T0方式1
DPTR,#0FEF0H;D/A转换地址 A,#00H @DPTR,A TER0 $
;T0中断服务程序: CTC0:MOV
MOV DJNZ MOV
TL0,#0B0H TH0,#3CH R3,EXIT R3,#0AH
;定时不到1S,则继续等待 ;软件计数初值
MOV MOV MOVX SETB
DPTR,#0FEF0H;D/A转换地址 A,#00H @DPTR,A EX1
;启动D/A转换
EXIT:RETI
;A/D转换结束中断服务程序: INT:MOVX
MOV INC INC DJNZ CLR
A,@DPTR @R0,A DPTR R0 EX1
;读A/D转换结果 ;存放内部RAM单元 ;指向下路通道 ;指向下RAM单元
;关A/D转换z结束中断
R2,NEXT
NEXT:RETI
习题8
1.说明下列概念 (1)串行通信 (3)异步通信 (5)波特率
(7)半双工通信方式 答:略
2.假定异步串行通信的字符格式为一个起始位、八个数据位、二个停止位以及奇校验位,请画出传送字符“T”的桢格式。
解:“T”的ASCII码为54H=01010100B,传送桢格式如下:
(2)并行通信 (4)同步通信 (6)单工通信方式 (8)全双工通信方式
一桢10起始位D0D1D2D3D4D5D6D700101010P110奇偶校验位停止位3.串行通信有那几种数据通信格式,试举例说明。 答:略
4.串行通信的总线标准是什么?有那些内容? 答:略
5.MCS-51单片机的串行口共有那几种工作方式?各有什么特点和功能?
答:MCS-51单片机串行口的工作方式有方式0、方式1、方式2和方式3四种,各工作方式是由设置串行口控制寄存器SCON来确定的。串行口控制寄存器SCON还用来设定串行口的接收或发送控制及状态,其格式如下:
SM0 SM1 SM2 REN TB8 RB8 TI RI 串行口的工作方式及串行口的4种工作方式的功能及相应的波特率如下表。
SM0 SM1方式0 00 11 01 10123功 能同步移位存储器(用I/O口扩展)8位UART(通用异步接收和发送器)9位UART(起始位1、数据位8、可编程位1、停止位1)9位UART波特率 fosc/12222SMODSMODSMOD(T1溢出率)/32 fosc/64(T1溢出率)/32
6.MCS-51单片机四种工作方式的波特率应如何确定? 答:见5题
7.简述单片机多机通信的原理。 答:略
8.已知异步通信接口的桢格式由一个起始位、七个数据位、一个奇偶校验位和一个停止位组成。当该接口每分钟传送3600个字符时,计算其传送波特率。
解:由题意可知,每个字符为10位,则每秒传送3600/60=60个字符。 故波特率为:
60×10=600(位/秒)=600b/s
9.试设计一个发送程序,将片内RAM 20H~2FH中的数据从串行口输出,要求将串行口定义为工作方式2,TB8作为奇偶校验位。 解:程序如下:
MOV SCON,#80H
MOV PCON,#80H MOV
SMOD,#00H
;首地址20H→间址寄存器R0 ;数据字节数→R7 ;取一数据→A
;P随A变,P→C→TB8 ;数据→SBUF,启动发送 ;等待发送完 ;调整发送数据指针
MOV R0,#20H MOV R7,#16 MOV C,P MOV SBUF,A JNB TI,$ CLR TI INC R0 DJNZ R7,LOOP SJMP $
LOOP: MOV A,@R0
;设定为方式2发送 ;波特率为fosc/32
MOV TB8,C
10.以8031串行口按工作方式1进行串行数据通信。假定波特率为1200bps,以查询方式传送数据,请编写全双工通信程序。
解:参考程序略(见8.5.1 双机通信举例)
11.以8031串行口按工作方式3进行串行数据通信。假定波特率为1200bps,第九数据位作奇偶校验位,以中断方式传送数据,请编写通信程序。
解:设为单片机双机通信系统按工作方式3实现全双工通信,若发送数据区的首址为内部RAM30H~3FH单元,接收数据的首址为40H单元,设两机晶振为6MHz,则采用定时器T1方式2计算初值为0F3H。通信程序如下: 主程序:
ORG LJMP ORG MAIN:MOV
MOV MOV SETB MOV
0000H MAIN 1000H
TMOD,#20H ;定时器1设方式2 TL1,#0F3H TH1,#0F3H TR1
;启动T1
SCON,#0D0H ;串行口设方式3,充许接收
;定时器初值
MOV MOV MOV SETB SETB LCALL SJMP R0,#30H R1,#40H R7,#16 EA ES STXD $
;发送区首址 ;接收区首址 ;数据块长度计数器 ;开总中断 ;开串行口中断 ;先输出一个字符 ;等待中断 ;中断服务程序:
ORG AJMP ORG
SBRK: JB
LCALL SJMP
SEND: LCALL NEXT:RETI ;发送子程序 ORG STXD: CLR
MOV MOV MOV MOV
DJNZ INC
EXIT: RET ;接收子程序:
ORG SRXD:CLR
MOV JNB JNB
RIGHT: MOV
DJNZ INC
CLR SJMP
PER: SETB SJMP PNP: JB
SJMP
EXIT1:RET
0023H
SBRK 0100H T1,SEND SRXD NEXT STXD
0200H TI
A,@R0 C,P
TB8,C SUBF,A R7,EXIT R0
0400H RI
A,SBUF P,PNP
RB8,ERR @R1,A R7,EXIT1
R1 F1
EXIT1 F1
EXIT1 RB8,PER RIGHT
;串行口中断入口
;TI=1为发送中断 ;RI=1为接收中断 ;转到统一出口 ;调发送子程序
;TI清零 ;取发送数据到A ;奇偶校验赋予TB8C ;启动发送
;判断16位是否发送完 ;修改发送地址指针
;从串行口中读取数据 ;P=0,去PNP
;P=1,RB8=0,出错去PER ;P=1,RB8=1,存接收数据 ;判断16位是否接收完
;正确接收完16个字节数据清零标志位F1 ;奇偶错置位F1
;P=0,RB8=1,奇偶错去PER ;P=0,RB8=0,去RIGHT
相关推荐: