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

📄 sci_pc.asm

📁 motorola 单片机 A/D转换
💻 ASM
字号:
*-----------------------------------------------------------------*
*文件名:SCI_PC.ASM                                               *
*硬件连接:单片机PTA定义为输出,与OUT模块的8个LED连接,用于显示   *
*          其中A0作为运行指示不受其它数据控制                     *
*          PTB与与电位器相连连接作为AD输入,PTB口作为模拟量输入口 *
*          PTC的(C0-C4)与IN模块的5位拨位开关连接                  *
*          串行口与微机串行口相接(9600,N,8,1),驻留程序已定义      *
*程序描述:1、缓冲区接收8个模拟量与一位开关量                     *
*          2、以86为握手信号与PC机通信,PC机接收到握手信号后回送  *
*             一个握手信号,然后单片机向PC机发送缓冲区内数据,    *
*             PC机接收并显示                                      *
*说明:此程序用于实现PC机与MCU的通信                              *
*-----------------------------------------------------------------*
*---------口地址定义-----------------------------------------------
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口方向寄存器
PTE     equ     $0008                 ;E数据寄存器
*========SCI===============================================SCI寄存器
SCSR    equ     $0016                 ;SCI状态寄存器
b_TDRF  equ     7                     ;发送缓冲区空标志位
b_TC    equ     6                     ;发送完成标志位
b_RDRF  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   
INBUF   rmb     1                     ;1字节存放5位开关量
ADBUF   rmb     8                     ;8字节存放8路A/D转换结果
OnOff   rmb     1                     ;1字节存放从PC的数据       
*========主程序入口=================================================
        org  FlashStartAddr           ;程序起始地址
MainInit:                             ;复位后程序从此开始执行 
        ;系统初始化
        SEI                           ;禁止所有中断
        LDHX    #$023F                ;堆栈初始化,放入GP32的RAM最高端
        TXS
        JSR     Init0                 ;调系统初始化子程序Init0,初始学习时跳过此处
        NOP
        LDA     #$3E                  ;A/D初始化2分频、使用内部总线时钟
        STA     ADCLK           
        LDA     #$FF                  ;定义PTA输出
        STA     DDRA
        LDA     #$00
        STA     PTA
        STA     OnOff             
        LDA     #$00                  ;定义PTB,PTC作为输入
        STA     DDRB
        STA     DDRC            
*-------A/D转换-------------------------------------------------------
MAIN:                                 ;循环获得8路AD值
        NOP                
        LDHX    #$0                   ;初始H:X=0
GA_Repeat:
        TXA                           ;X寄存器送到累加器
        STA     ADSCR                 ;选定一路A/D,启动转换
        BRCLR   b_COCO,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   b_TDRF,SCSR,*         ;等待以前数据全部发出,SCTE置1,发送缓冲区空
        STA     SCDR                  ;发送缓冲区空时,可向SCI数据寄存器送数
*----串行通信输入---------------------------------------------------
        NOP                     
        LDHX    #0              
WS_Repe1:
        BRSET   b_RDRF,SCSR,WS_Rece1  ;测试SCRF位,判断接收缓冲器是否满
        NOP
        AIX     #1                    ;延时等待
        CPHX    #$DFFF
        BNE     WS_Repe1
        BRA     DISP1                 ;超时退出
WS_Rece1:
        LDA     SCDR                  ;读取收到的数据
        CMP     #$56                  ;判断是否为确认信号86
        BNE     DISP1                 ;不是退出,是就开始通信
        NOP                     
        LDHX    #0              
WS_Repe2:
        BRSET   b_RDRF,SCSR,WS_Rece2  ;测试SCRF位,判断接收缓冲器是否满
        NOP
        NOP
        AIX     #1                    ;延时等待
        CPHX    #$6688
        BNE     WS_Repe2 
        BRA     DISP1                 ;超时退出
WS_Rece2:
        LDA     SCDR                  ;读取收到的数据
        NOP
        AND     #$FE                  ;A0=0
        PSHA
        LDA     OnOff           
        AND     #%00000001            ;留下A.0
        STA     OnOff
        PULA
        ORA     OnOff                 ;处理接收的数据,放在A中
        STA     OnOff                 ;储存接收数据在ONOFF中
        NOP                            
*--把在INBUF和ADBUFF的数据送PC机输出-------------------------------
        LDHX    #$0
SA_Repeat:
        LDA     INBUF,X               ;第一个数据为开关量,紧接着8个A/D转换值
        BRCLR   b_TDRF,SCSR,*         ;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        
*------以下为子程序存放处----------------------------------------

*----系统初始化子程序(Init0)----------------------------------*
*功能:系统初始化                                             *
*入口:无                                                     *
*出口:                                                       *
*占用CPU内寄存器:A                                           *
*-------------------------------------------------------------* 
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 + -