180 likes | 394 Views
开关量输入输出 (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. 红线为学生接线. 硬件接线 :. 程序功能 :.
E N D
开关量输入输出(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
备注说明: • 仅作为基本教学例程