?? mcn_sy4.asm
字號:
*-----------------------------------------------------------------*
;硬件接線
;(1) PTA7~0接指示燈D7-D0,PTB3作為模擬量輸入口接電位器中間輸出端,PTC0接開關(guān)K0。
;(2)串行口與微機串行口相接(已連好)。
;實驗內(nèi)容
;(1)通過開關(guān)K0合上與斷開控制A/D轉(zhuǎn)換的開始和停止,當開始A/D轉(zhuǎn)換后,每秒對連接到PTB3的模擬量采樣一次,結(jié)果送指示燈D7~D0顯示。
;(2)采樣結(jié)果同步通過串行接口發(fā)送到PC機(38400bps,N,8,1),顯示格式為“The signal is:x.xV”(滿量程為5.0V)。
;(3)開關(guān)K0合上后,MCU與PC先建立握手信號,握手信號為$68(MCU端發(fā)送)、$69(PC端回送),當握手成功后再開始工作。(選做內(nèi)容)
*---------口地址定義-----------------------------------------------
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數(shù)據(jù)寄存器
*----SCI串行通信口地址------------------------------------------------
SCC1 equ $0013 ;SCI控制寄存器1
SCC2 equ $0014 ;SCI控制寄存器2
SCSR equ $0016 ;串行通信接口狀態(tài)寄存器地址
SCDR equ $0018 ;串行通信接口數(shù)據(jù)寄存器地址,scdr是接受和發(fā)送數(shù)據(jù)的最終平臺,從pc收數(shù)據(jù),即從scdr收,發(fā)數(shù)據(jù)即
;發(fā)給scdr
SCBR equ $0019 ;SCI波特率寄存器
b_TDRF equ 7 ;發(fā)送緩沖區(qū)空標志位
b_TC equ 6 ;發(fā)送完成標志位
b_RDRF equ 5 ;接收器滿標志位
*----------A/D------------------------------------------------------
ADSCR equ $003C ;A/D轉(zhuǎn)換狀態(tài)和控制寄存器
b_COCO equ 7 ;轉(zhuǎn)換完成標志位
ADR equ $003D ;A/D轉(zhuǎn)換數(shù)據(jù)寄存器
ADCLK equ $003E ;A/D轉(zhuǎn)換輸入時鐘寄存器
*
RAMstartAddr equ $0040 ;RAM的起始地址(因芯片不同可以更改)
FlashStartAddr equ $8000 ;程序開始地址(因芯片不同可以更改)
*--------數(shù)據(jù)區(qū)定義(變量名定義)-----------------------------------
org RAMstartAddr
inbuf rmb 18 ;18個字符放“The signal is:x.xV”
ADBUF rmb 1 ;1字節(jié)存放8路A/D轉(zhuǎn)換結(jié)果
OnOff rmb 1 ;1字節(jié)存放從PC的數(shù)據(jù)
hwei rmb 1 ;h的暫存位
*========主程序入口=================================================
org FlashStartAddr ;程序起始地址
MainInit: ;復(fù)位后程序從此開始執(zhí)行
;系統(tǒng)初始化
SEI ;禁止所有中斷
LDHX #$023F ;堆棧初始化,放入GP32的RAM最高端
TXS
JSR Init0 ;調(diào)系統(tǒng)初始化子程序Init0,初始學習時跳過此處
NOP
LDA #$3E ;A/D初始化2分頻、使用內(nèi)部總線時鐘
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位
;數(shù)據(jù),無檢驗
STA SCC1
LDA #%00001100 ;允許發(fā)送器,允許接收器,不允許發(fā)送與接收中斷
STA SCC2
LDA #%00000000 ;波特率為38400bps
STA SCBR
LDHX #$00
Display1: ;把要顯示的18個初始字符放入inbuf中
LDA DisplayBytes,X
STA inbuf,X
AIX #1
CPHX #$12
BNE Display1 ;循環(huán)18次
BRA MAIN
DisplayBytes FCB "The signal is:x.xV"
MAIN:
onoroff:
lda ptc
and #%00000001
cbeqa #%00000001,onoroff
LDHX #$00
*-------A/D轉(zhuǎn)換-------------------------------------------------------
NOP
lda #$3 ;初始a=3,取ptb3
STA ADSCR ;選定ptb3 進行A/D,啟動轉(zhuǎn)換
BRCLR b_COCO,ADSCR,* ;等待A/D轉(zhuǎn)換完成,b_COCO是adscr的第5位,1表示轉(zhuǎn)換結(jié)束,0表示正在轉(zhuǎn)換
LDA ADR ;A/D轉(zhuǎn)換結(jié)果給A,adr 用來存放ad中的數(shù)據(jù),在每一次A/D轉(zhuǎn)換后adr自動更新
STA ADBUF ;A給{ADBUF},儲存數(shù)據(jù),adbuf中的內(nèi)容就是ptb3進行ad轉(zhuǎn)化后的內(nèi)容
lda adbuf
sta pta ;把adbuf中的內(nèi)容給到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的數(shù)據(jù)送PC機輸出,以“The signal is:x.xV”形式-------------------------------
LDHX #$0
SA_Repeat:
LDA INBUF,X ;第一個數(shù)據(jù)為開關(guān)量,緊接著8個A/D轉(zhuǎn)換值
BRCLR b_TDRF,SCSR,* ;SCTE為1,則發(fā)送緩沖區(qū)空,可以重新發(fā)數(shù)據(jù)
STA SCDR ;A給SCDR,發(fā)送出去
AIX #1
CPX #$12 ;18個數(shù)據(jù)輸出
BNE SA_Repeat
LDA #$1 ;延時
JSR DelaySub
BRA MAIN
*------以下為子程序存放處----------------------------------------
*----系統(tǒng)初始化子程序(Init0)----------------------------------*
*功能:系統(tǒng)初始化 *
*入口:無 *
*出口: *
*占用CPU內(nèi)寄存器:A *
*-------------------------------------------------------------*
Init0: ;系統(tǒng)初始化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中的數(shù)值決定 *
*入口:A=延時長度 *
*注:最小延時0.1秒,最大延時A=$FF ,255*0.1=25.5秒 *
*占用CPU內(nèi)寄存器:HX,A *
*-------------------------------------------------------------*
DelaySub: ;延時0.1秒
PSHH ;保據(jù)寄存器HX
PSHX
DelaySub1:
LDHX #$FFFF
DelaySub2:
PSHA ;保護寄存器A
LDA #$FF
DelaySub3:
DBNZA DelaySub3
PULA
DBNZX DelaySub2
DBNZA DelaySub1
PULX
PULH
RTS
*-------------------------------------------------------------------
ORG $FFFE ;復(fù)位矢量
DW MainInit
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -