200 likes | 393 Views
实验目的 实验器材 硬件接线 VB 界面. 软件功能 程序清单 备注说明. 串行通信及 AD 转换实验. <<<. 实验目的 :. A/D 转换, 单片机异步串行通信. 实验器材 :. 1.SD-1 型在线编程实验仪 2. 导线若干. PTA7. PTB7. PTA6. PTB6. PTB5. PTA5. PTB4. VCC. PTA4. PTA3. PTB3. PTA2. MOTOROLA GP32 MCU. PTB2. PTA1. PTB1. PTA0. PTB0. PTC0. PTC1. PTC2. PTC3.
E N D
实验目的 实验器材 硬件接线 VB界面 软件功能 程序清单 备注说明 串行通信及AD转换实验 <<<
实验目的: A/D转换, 单片机异步串行通信
实验器材: 1.SD-1型在线编程实验仪 2.导线若干
PTA7 PTB7 PTA6 PTB6 PTB5 PTA5 PTB4 VCC PTA4 PTA3 PTB3 PTA2 MOTOROLA GP32 MCU PTB2 PTA1 PTB1 PTA0 PTB0 PTC0 PTC1 PTC2 PTC3 PTC4 VCC 硬件接线:
软件功能: • 由PORTB口的模拟量输入,通过单片机的A/D转换器采集8路数据,并放在ADBUF开始的地址中。 • 再在INBUF中放开关量。 • 发86给PC机作为握手信号,进行通信测试,PC机判断后确认,发86作为确认信号,单片机收到86后,把模拟量0-7和开关量送PC机显示。
文件说明 口地址定义 SCI寄存器 A/D寄存器 数据区定义 主程序 A/D转换 串行通信输出 串行通信输入 从PC机接收数据,并存储后送PTA输出 把在INBUF和ADBUFF的数据送PC机输出 中断矢量 程序清单:
*---------文件说明-------------------------------------------**---------文件说明-------------------------------------------* *文件名:sci.as *硬件连接:PORTA口输出它的PTA7-0接OUT的7-0号 *指示灯(A0作为运行指示不受其它数据控制)PORTB作为AD输入连接, *PORTB口为模拟量输入口,PORTC的C0-4接IN的5个拨位开关0-4作为开关 *输入串行口与微机串行口相接(9600,N,8,1) *程序描述:1.由PORTB口的模拟量输入,通过单片机的A/D转换器采集8 *路数据,并放在ADBUF开始的地址中 * 2.再在INBUF中放开关量 * 3.发86给PC机作为握手信号,进行通信测试,PC机判断后确 * 认,发86作为确认信号,单片机收到86后,把模拟量 0-7和 * 开关量送PC机显示 *目的:A/D转换,单片机异步串行通信 *------------------------------------------------------------*
*----口地址定义---------------------------- PTA EQU $0000 ;A口数据寄存器 PTB EQU $0001 ;B口数据寄存器 PTC EQU $0002 ;C口数据寄存器 PTD EQU $0003 ;D口数据寄存器 DDRA EQU $0004 ;A口数据方向寄存器 DDRB EQU $0005 ;B口数据方向寄存器 DDRC EQU $0006 ;C口数据方向寄存器 DDRD EQU $0007 ;D口数据方向寄存器 DDRE EQU $0008 ;E口数据寄存器
*----SCI寄存器----------------------------- SCS1 EQU $0016 ;SCI状态寄存器1 B-SCTE EQU 7 ;发送缓冲区空标志位 B-TC EQU 6 ;发送完成标志位 B-SCRF EQU 5 ;接收器满标志位 SCDR EQU $0018 ;SCI数据寄存器 *---A/D寄存器----------------------------- ADSCR EQU $003C ;A/D转换状态和控制寄存器 B-COCO EQU 7 ;转换完成标志位 ADR EQU $003D ;A/D转换数据寄存器 ADCLK EQU $003E ;A/D转换输入时钟寄存器 RAMstartAddr equ $0040 ;RAM的起始地址(因芯片不同可以更改) FlashStartAddr equ $8000 ;程序开始地址(因芯片不同可以更改)
*----数据区定义(变量定义)----------------- ORG RAMstartAddr ;RAM的起始地址 INBUF RMB 1 ;1字节存放5位开关量 ADBUF RMB 8 ;8字节存放8路A/D转换结果 ONOFF RMB 1 ;1字节存放从PC的数据 TMPVAR RMB 1 ;暂存使用
*----主程序--------------------------------- ORG FlashStartAddr ;程序起始地址 MainInit:: NOP LDA #$3E ;A/D初始化2分频、使用内部总线时钟 STA ADCLK LDA #$FF ;定义PORTA输出 STA DDRA LDA #$00 STA PTA STA ONOFF ;ONOFF=0 LDA #$00 ;定义PORTB,PORTC作为输入 STA DDRB STA DDRC
*-------A/D转换------------------------------ Main: NOP ;循环获得8路AD值 LDHX #$0 ;H:X=0 GA-REPEAT: TXA ;X寄存器送到累加器 STA ADSCR ;选定一路A/D,启动转换 BRCLR 7,ADSCR,* ;等待A/D转换完成 LDA ADR ;A/D转换结果给A STA ADBUF,X ;A给{ADBUF+X},储存数据 AIX #1 ;下一存储单元 CPX #$08 ;判断8路转换是否完成 BNE GA-REPEAT ;循环8次转换8个通道模拟量
*----串行通信输出------------------------------- GET-IN: LDA PTC ;5位开关量采集 STA INBUF ;暂放INBUF NOP LDA #$56 ;把86(16进制数56)为握 ;手信号送出到PC中 BRCLR 7,SCS1,* ;等待以前数据全部发出, ;SCTE置1,发送缓冲区空 STA SCDR ;发送缓冲区空时, ;可向SCI数据寄存器送数
*----串行通信输入----------------------------- NOP LDHX #0 WS-REPE1: BRSET 5,SCS1,WS-RECE1 ;测试SCRF位, ;判断接收缓冲器是否满 NOP NOP AIX #1 ;延时等待 CPHX #$FFFF BNE WS-REPE1 BRA DISP1 ;超时退出 WS-RECE1: LDA SCDR ;读取收到的数据
CMP #$56 ;判断是否为确认信号86 BNE DISP1 ;不是退出,是就开始通信 NOP LDHX #0 WS-REPE2: BRSET 5,SCS1,WS-RECE2 ;测试SCRF位, ;判断接收缓冲器是否满 NOP NOP AIX #1 ;延时等待 CPHX #$6688 BNE WS-REPE2 ;超时退出 BRA DISP1
*----从PC机接收数据,并储存后送PTA输出----------*----从PC机接收数据,并储存后送PTA输出---------- *----(A.0不受影响)---------------------------- WS-RECE2 LDA SCDR NOP AND #$FE ;A0=0 STA TMPVAR ;暂时缓存 LDA ONOFF AND #$1 ;留下A.0 ORA TMPVAR ;处理接收的数据,放在A中 STA ONOFF ;储存接收数据在ONOFF中 NOP ;送A/D值
*----把在INBUF和ADBUFF的数据送PC机输出-------- LDHX #$0 SA-REPEAT: LDA INBUF,X BRCLR 7,SCS1,* ;SCTE置1, ;发送缓冲区空 STA SCDR ;A给SCDR,发送出去 AIX #1 CPX #$09 ;9个数据输出 BNE SA-REPEAT
DISP1: NOP LDA ONOFF EOR #$1 ;把原A.0取反,使灯闪烁 STA ONOFF STA PTA BRA MAIN ********************************************** *----中断矢量--------------------------------- ORG $FFFE ;复位矢量 DW MainInit:
备注说明: 单片机与PC机使用串行异步通信。在此程序下,通过PC机下的VB6.0控制程序构成一定功能的微机控制系统。