⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ioexma1.asm.bak

📁 MC68HC08908GP32微控制器IO实验
💻 BAK
字号:
*-----------------------------------------------—----------------*
*文件名:IOEXMA1.ASM                                               *
*硬件连接:PTA7-4接开关,PTA3-0接指示灯                             *
*         PTB1接指示灯,PTBO接开关                                *
*         PTC1接指示灯,PTC0接开关                                *
*程序描述:1、开关PTA7-4分别控制着指示灯PTA3-0亮灭                 *
*         2、开关PTB0、PTC0其中之一闭合指示灯PTB1与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       ;RAM的起始地址
TmpVar    rmb     1              ;变量TmpVar,缓冲使用
Light_BC  rmb     1              ;BC口灯的状态
;---
*==================================================================
*主程序——————————————————————————————
        org  FlashStartAddr      ;程序起始地址
MainInit:                        ;复位后程序从此开始执行 
        NOP                      ;系统初始化
        SEI                      ;禁止所有中断
        LDHX #$023F              ;堆栈初始化,放入GP32的RAM最高端
        TXS
        JSR Init0                ;调系统初始化子程序Init0,初始学习时跳过此处

                                 ;I/O初始化
        LDA #%00001111           ;定义A口7-4为输入,3-0为输出
        STA DDRA
        LDA #%11110000           ;定义A口7-4有上拉电阻
        STA PTAPUE
        LDA #%11111110           ;定义A口7-1为输出,0为输入
        STA DDRB
        STA DDRC                 ;定义A口6-1为输出,0为输入
        MOV #$FF,Light_BC        ;BC口的状态赋初值
Start:                           ;程序总循环入口
        NOP                      
        LDA PTA                  ;读取A口状态
        NSA                      ;A口7-4输入控制A口3-0输出
                                 ;刚好为A7-4->A3-0
        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,两个均闭合
                                 ;若A=1,有一个闭合;若A=2,均未闭合
        CBEQA #$0,Light0         ;A=0转Light0
        NOP
        CBEQA #$1,Light1         ;A=1转Light1
        NOP                      ;A=2,两排均不亮
        LDA #$FF
        STA PTB
        STA PTC
        BRA IO_End               ;转IO_END
Light0:
        LDA #$00                 ;两排灯均亮
        STA PTB
        STA PTC
        BRA IO_End               ;转IO_END
Light1:
        LDA Light_BC             ;两排灯之一亮
        STA PTB                  ;驱动B口灯
        NEGA                     ;取反
        STA PTC                  ;驱动C口灯
        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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -