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

📄 mcn_sy4.asm

📁 (1)通过开关K0合上与断开控制A/D转换的开始和停止
💻 ASM
字号:
*-----------------------------------------------------------------*
;硬件接线
;(1) PTA7~0接指示灯D7-D0,PTB3作为模拟量输入口接电位器中间输出端,PTC0接开关K0。
;(2)串行口与微机串行口相接(已连好)。
;实验内容
;(1)通过开关K0合上与断开控制A/D转换的开始和停止,当开始A/D转换后,每秒对连接到PTB3的模拟量采样一次,结果送指示灯D7~D0显示。
;(2)采样结果同步通过串行接口发送到PC机(38400bps,N,8,1),显示格式为“The signal is:x.xV”(满量程为5.0V)。
;(3)开关K0合上后,MCU与PC先建立握手信号,握手信号为$68(MCU端发送)、$69(PC端回送),当握手成功后再开始工作。(选做内容)  

*---------口地址定义-----------------------------------------------
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串行通信口地址------------------------------------------------
SCC1    equ  $0013              ;SCI控制寄存器1
SCC2    equ  $0014              ;SCI控制寄存器2
SCSR    equ  $0016              ;串行通信接口状态寄存器地址
SCDR    equ  $0018              ;串行通信接口数据寄存器地址,scdr是接受和发送数据的最终平台,从pc收数据,即从scdr收,发数据即 

                                ;发给scdr
SCBR    equ  $0019              ;SCI波特率寄存器
b_TDRF  equ     7                     ;发送缓冲区空标志位
b_TC    equ     6                     ;发送完成标志位
b_RDRF  equ     5                     ;接收器满标志位
*----------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     18                    ;18个字符放“The signal is:x.xV”
ADBUF   rmb     1                     ;1字节存放8路A/D转换结果
OnOff   rmb     1                     ;1字节存放从PC的数据  
hwei    rmb     1                     ;h的暂存位
*========主程序入口=================================================
        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   
*----串行口初始化------------------------------------------------------
        LDA  #%01000000         ;D6(ENSCI)=1,允许SCI,其它位为0,正常码输出,8位
                                ;数据,无检验
        STA  SCC1
        LDA  #%00001100         ;允许发送器,允许接收器,不允许发送与接收中断
        STA  SCC2
        LDA  #%00000000         ;波特率为38400bps
        STA  SCBR        

        LDHX #$00
Display1:                       ;把要显示的18个初始字符放入inbuf中
        LDA  DisplayBytes,X
        STA  inbuf,X
        AIX  #1
        CPHX #$12
        BNE  Display1            ;循环18次
        BRA  MAIN
DisplayBytes  FCB  "The signal is:x.xV"

MAIN: 
onoroff:
        lda ptc
        and #%00000001
        cbeqa #%00000001,onoroff

        LDHX #$00 
*-------A/D转换-------------------------------------------------------

        NOP                
        lda     #$3                    ;初始a=3,取ptb3
        STA     ADSCR                 ;选定ptb3 进行A/D,启动转换
        BRCLR   b_COCO,ADSCR,*        ;等待A/D转换完成,b_COCO是adscr的第5位,1表示转换结束,0表示正在转换
        LDA     ADR                   ;A/D转换结果给A,adr 用来存放ad中的数据,在每一次A/D转换后adr自动更新
        STA     ADBUF                 ;A给{ADBUF},储存数据,adbuf中的内容就是ptb3进行ad转化后的内容

        lda     adbuf
        sta     pta                    ;把adbuf中的内容给到pta即给到LED

        lda    adbuf
        ldx    #$32
        mul
        stx    hwei
        ldhx   hwei
        ldx    #$ff
        div                            ;00-$ff的ad量变成00-$32(50b)
        
        clrh
        ldx   #$a
        div
        add  #$30
        sta   {inbuf+!14}
        sthx   hwei
        lda   hwei
        add   #$30
        sta   {inbuf+!16}    
         
*--把在ADBUFF的数据送PC机输出,以“The signal is:x.xV”形式-------------------------------
        LDHX    #$0
SA_Repeat:
        LDA     INBUF,X               ;第一个数据为开关量,紧接着8个A/D转换值
        BRCLR   b_TDRF,SCSR,*         ;SCTE为1,则发送缓冲区空,可以重新发数据
        STA     SCDR                  ;A给SCDR,发送出去
        AIX     #1
        CPX     #$12                  ;18个数据输出
        BNE     SA_Repeat       
        LDA    #$1                    ;延时 
        JSR    DelaySub
        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    

*----程序延时子程序(DelaySub)---------------------------------*
*功能:程序方法延时,延时长短由入口A中的数值决定              *
*入口:A=延时长度                                             *
*注:最小延时0.1秒,最大延时A=$FF ,255*0.1=25.5秒             *
*占用CPU内寄存器:HX,A                                        *
*-------------------------------------------------------------* 
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
*-------------------------------------------------------------------
        ORG   $FFFE                   ;复位矢量          
        DW    MainInit

 

⌨️ 快捷键说明

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