2.91k likes | 3.05k Views
单片机原理及其嵌入式应用 实 验. 基本实验 综合实例. <<<. 程序框架 开关量输入输出( IO) 实验 串行通信及 AD 转换实验 键盘编程实验 液晶显示实验. 数码管显示实验 FLASH 编程实验 定时器溢出中断实验 定时器输入中断捕捉实验. 基本实验. <<<. 实验目的 实验器材 硬件接线. 软件功能 程序清单 备注说明. 程序框架. <<<. 实验目的:. 了解程序基本框架. 实验器材:. 1. SD-1 型在线编程实验仪 2.导线若干. PTA7. PTB7. PTA6. PTB6. PTB5. PTA5.
E N D
单片机原理及其嵌入式应用实 验 • 基本实验 • 综合实例 <<<
程序框架 开关量输入输出(IO)实验 串行通信及AD转换实验 键盘编程实验 液晶显示实验 数码管显示实验 FLASH编程实验 定时器溢出中断实验 定时器输入中断捕捉实验 基本实验 <<<
实验目的 实验器材 硬件接线 软件功能 程序清单 备注说明 程序框架 <<<
实验目的: 了解程序基本框架
实验器材: 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 硬件接线:
软件功能: • PTA口的模拟量输出,控制指示灯 • 程序执行指示灯闪烁
文件说明 口地址定义 数据区定义 主程序 系统初始化及中断矢量 延时子程序 程序清单:
*---------文件说明------------------------------------ *文件名:PrgFrame.ASM *硬件连接:PTA.1接指示灯 *程序描述:指示灯PTA.1闪烁 *目的:第一个Motorola MCU程序框架 *说明:提供Motorola MCU的编程框架,供教学入门使用 *-----------------------------------------------------
*----口地址定义---------------------------- PTA EQU $0000 ;A口数据寄存器 DDRA EQU $0004 ;A口数据方向寄存器
RAMstartAddr equ $0040 ;RAM的起始地址(因芯片不同可以更改) FlashStartAddr equ $8000 ;程序开始地址(因芯片不同可以更改) *数据区定义(变量名定义)—————————————————— org RAMstartAddr ;RAM的起始地址 N1 rmb 1 ;变量N1,缓冲使用
*主程序——————————————————————————————*主程序—————————————————————————————— org FlashStartAddr ;程序起始地址 MainInit: ;复位后程序从此开始执行 ;系统初始化 SEI ;禁止所有中断 LDHX #$023F ;堆栈初始化,放入GP32的RAM最高端 TXS JSR Init0 ;调系统初始化子程序Init0,初始学习时跳过此处 ;I/O初始化 BSET 1,DDRA ;设置PTA.1为输出 BSET 1,PTA ;初始时,PTA.1指示灯"暗" MainLoop: ;程序总循环入口 BCLR 1,PTA ;PTA.1指示灯“亮” MOV #$2,N1 ;延时子程序DelaySub的时间长度入口 JSR DelaySub ;调用延时子程序 BSET 1,PTA ;初始时,PTA.1指示灯"暗" MOV #$4,N1 ;延时子程序DelaySub的时间长度入口 JSR DelaySub ;调用延时子程序 ;------------------------------------------------------- JMP MainLoop ;转总循环入口处
Init0: ;系统初始化Init0子程序 LDA #%00000001 ;初始化CONFIG2 STA $001E LDA #%00111101 ;初始化CONFIG1 STA $001F CLR $0036 ;初始化PTCL MOV #$01,$0036 MOV #$01,$0038 MOV #$2C,$0039 MOV #$80,$003A BSET 5,$0036 BSET 7,$0037 BSET 4,$0036 RTS *----中断矢量--------------------------------- ORG $FFFE ;复位矢量 DW MainInit
延时子程序 DelaySub: ;延时0.1秒 PSHH ;保据寄存器HX PSHX DelaySub1: LDHX #$FFFF DelaySub2: PSHA ;保护寄存器A LDA #$FF DelaySub3: DBNZA DelaySub3 PULA DBNZX DelaySub2 DBNZA DelaySub1 PULX PULH RTS
开关量输入输出(IO)实验 • 实验目的 • 实验器材 • 硬件接线 • 程序功能 • 程序清单 • 备注说明 <<<
实验目的: 掌握I/O口的基本使用方法
实验器材: 1.SD-1型在线编程实验仪 2. 导线若干
vcc PTA7 PTA6 PTA5 PTA4 PTA3 vcc PTA2 MOTOROLA GP32 MCU PTA1 PTA0 PTB1 PTC1 PTB0 PTC0 vcc 黄线为学生接线 硬件接线:
程序功能: • 开关PTA7-4分别控制着指示灯PTA3-0 亮暗 • 开关PTB0\PTC0 其中之一闭合,指示灯PTB7-1与PTC1交替暗亮; 若两个均未闭合,则指示灯PTB1与PTC1 均不亮; 若两个均闭合,则两个指示灯均亮.
程序说明 口地址定义 变量定义 主程序 初始化子程序 复位矢量 程序清单:
*------程序说明--------------------------------* *文件名:IOEXMA.ASM *硬件连接:PTA7-4接开关,PTA3-0接指示灯 *PTB1接指示灯,PTB0接开关 *PTC1接指示灯,PTC0接开关 *程序描述:①开关PTA7-4分别控制着指示灯PTA3-0暗 * ②开关PTB0、PCT0其中之一闭合指示PTB7-1 * 与PTC1交替暗亮,若两个均未闭合则指示灯 * PTB1与PTC1均不亮,若两个均闭合则两排 * 指示灯均亮。 *目的:I/O口的基本使用方法 *说明:仅作为基本教学例程 *----------------------------------------------*
*-----口地址定义—————————————————*-----口地址定义————————————————— DDRA equ $0004 ;A口数据方向寄存器 PTA equ $0000 ;A口数据寄存器 PTAPUE equ $000D ;A口上拉电阻允许寄存器 DDRB equ $0005 ;B口数据方向寄存器 PTB equ $0001 ;B口数据寄存器 DDRC equ $0006 ;C口数据方向寄存器 PTC equ $0002 ;C口数据寄存器 RAMstartAddr equ $0040 ;RAM的起始地址(因芯片不同可以更改) FlashStartAddr equ $8000 ;程序开始地址(因芯片不同可以更改) *-----数据区定义(变量名定义)—————————— org RAMstartAddr TmpVar rmb 1 ;变量TmpVar,缓冲使用 Light_BC rmb 1 ;BC口灯的状态
*------主程序————————————————*------主程序———————————————— org FlashStartAddr ;程序起始地址 MainInit: NOP ;初始化—————— SEI ;禁止所有中断 LDHX #$023F ;堆栈初始化, ;放GP32的RAM最高端 TXS JSR Init0 ;调系统初始化子程序Init0, ;初始学习时跳过此处
LDA #%00001111 ;定义A口7-4为输入,3-0为输出 STA DDRA LDA #%11110000 ;定义A口7-4有上拉电阻 STA PTAPUE LDA #%11111110 ;定义B口7-1为输出,0为输入 STA DDRB STA DDRC ;定义C口7-1为输出,0为输入 MOV #$FF,Light_BC ;BC口灯的状态赋初值
Start: ;程序总循环入口—— NOP LDA PTA ;读取A口状态 NSA ;A口7-4输入控制A口3-0输出 ;刚好为A.7-4->A.3-0 COMA STA PTA LDA PTB ;取开关PTB0状态,0-闭合 AND #%00000001 ;剩下PTB0位 STA TmpVar ;放入变量TmpVar
NOP LDA PTC ;取开关PTC0状态,0-闭合 AND #%00000001 ;剩下PTC0位 NOP ADD TmpVar ;经过此运算 若A=0,两个均闭合 ;若=1,有一个闭合;=2,均未闭合 CBEQA #$0,Light0 ;比较,相等转移,A=0转向Light0
NOP CBEQA #$1,Light1 ;A=1转Light1 NOP ;A=2,两排均不亮 LDA #$FF ;两排灯均不亮 1-不亮 STA PTB STA PTC BRA IO_End ;转IO_END,延时
Light0: LDA #$00 ;两排灯均亮 0-亮 STA PTB STA PTC BRA IO_End ;无条件转IO_END Light1: LDA Light_BC ;两排灯之一亮 0-亮 STA PTB ;驱动B口灯 NEGA ;求补命令 STA PTC ;驱动B口灯 STA Light_BC ;保存状态
IO_End: LDA #$FE ;延时 Delay1: LDX #$FC Delay2: NOP NOP NOP DBNZX Delay2 DBNZA Delay1 BRA Start ;无条件转开始处 *-------------------------------------------
*------子程序--------------------------* Init0: ;系统初始化Init0子程序 LDA #%00000001 ;初始化CONFIG2 STA $001E LDA #%00111101 ;初始化CONFIG1 STA $001F CLR $0036 ;初始化PTCL MOV #$01,$0036 MOV #$01,$0038 MOV #$2C,$0039 MOV #$80,$003A
BSET 5,$0036 BSET 7,$0037 BSET 4,$0036 RTS *--------复位矢量---------------------------- ORG $FFFE ;复位矢量 DW MainInit
备注说明: • 仅作为基本教学例程
实验目的 实验器材 硬件接线 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