单片机实验源程序及结果
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2.2 (跑马灯)
主要程序代码
; code section
ORG ROMStart
Entry:
LDS #RAMEnd+1 ; initialize the stack pointer
LDAA #$FF
STAA DDRB
LDAA #$C0
STAA IRQCR
CLI ; enable interrupts
LDAA #$FF
STAA PORTB
LDAA #$0F
STAA PORTB
BSR DELAY
RTI
DELAY:
PSHX
PSHY
LDX #200
DELAY1: LDY #200
DELAY2: NOP
NOP
DBNE Y,DELAY2
DBNE X,DELAY1
PUL Y
PULX
RTI
;************************************************************** ;* Interrupt Vectors *
;************************************************************** ORG $FFFE
DC.W Entry
实验2.3 (4个拨位开关(SW3-1、2、3、4)控制4个LED的亮或灭)主要程序代码
ORG $2000
LDAA #$F0
STAA DDRB
SHIFT: LDAA PORTB
STAA PORTB
BRA DELAY
LSLA
LSLA
LSLA
LSLA
BRA SHIFT
DELAY: PSHA
PSHB
PSHX
LDX #$0200
DELAY1: LDY #$0500
DELAY2: DEY
BNE DELAY2
DEX
BNE DELAY1
PULX
PULB
PULA
RTS
实验4.1 (A/D转换)
主要程序代码
ORG ROMStart
Entry:
LDS #RAMEnd+1 ; initialize the stack pointer
LDAA #$FF
STAA DDRT
LDAA #$00
STAA PTT
LDAA #$C0
STAA ATD0CTL2
LDAA #$08
STAA ATD0CTL3
LDAA #$E7
STAA ATD0CTL4
LDAA #$A5
STAA ATD0CTL5
LDAA #$00
STAA ATD0DIEN
W AIT: ; BRCLR A TD0STA T1,#$01,W AIT
LDAA A TD0STA T1
ANDA #$01
BNE CON
BRA W AIT
CON: LDAA ATD0DR0L
COMA
STAA PTT
BRA W AIT
;************************************************************** ;* Interrupt Vectors *
;************************************************************** ORG $FFFE
DC.W Entry ; Reset Vector
实验4.2 (SCI串行通信与A/D转换)
主要程序代码
ORG ROMStart
Entry:
LDS #RAMEnd+1 ; initialize the stack pointer
SEI
LDX #13
STX SCI0BD
LDAA #0
STAA SCI0CR1
LDAA #$0C
STAA SCI0CR2
BRCLR SCI0SR1,#$88,*
STAA SCI0DRL
LDAA #$FF
STAA DDRT
LDAA #$00
STAA PTT
LDAA #$C0
STAA ATD0CTL2
LDAA #$08
STAA ATD0CTL3
LDAA #$E7
STAA ATD0CTL4
LDAA #$A5
STAA ATD0CTL5
LDAA #$00
STAA ATD0DIEN
W AIT0: BRCLR SCI0SR1,#$20,*
LDAA SCI0DRL
LDAB #$88
CBA
BNE W AIT0
W AIT: BRCLR A TD0STA T1,#$01,W AIT
LDAA A TD0DR0L
COMA
BRCLR SCI0SR1,#$80,*
STAA SCI0DRL
BRA W AIT
;************************************************************** ;* Interrupt Vectors *
;************************************************************** ORG $FFFE
DC.W Entry ; Reset Vector
实验3.1 (外部中断IRQ触发的LED跑马灯)
主要程序代码
FLAG EQU $2000
; code section
ORG ROMStart
MAIN:
Entry:
LDS #RAMEnd+1
LDAA #$FF
STAA DDRB
LDAA #$C0
STAA IRQCR
CLI
LDAA #$FF
STAA PORTB
NEXT: LDAA #$00
STAA FLAG
WAIT: CMPA FLAG
BEQ WAIT
SEC
LDAA #$FE
SHIFT: STAA PORTB
BSR DELAY
LDAB PTP
ANDB #$01
BEQ NEXT
ROLA
BRA SHIFT
IRQ_ISR:
LDAA #$FF
STAA FLAG
RTI
DELAY:
PSHX
PSHY
DELAY1: LDY #200
DELAY2: NOP
NOP
DBNE Y,DELAY2
DBNE X,DELAY1
PULY
PULX
RTS
ORG $FFF2
FDB IRQ_ISR
;************************************************************** ;* Interrupt Vectors * ;************************************************************** ORG $FFFE
DC.W Entry ; Reset Vector
实验3.2 (3s精确定时)
主要程序代码
ORG ROMStart
Entry:
LDS #RAMEnd+1 ; initialize the stack pointer
SEI
LDAA #$FF
STAA DDRB
LDAA #$FF
STAA PORTB
LDAA #$80
STAA TSCR1
LDAA #$07
STAA TSCR2
LDAA #$01
STAA TIE
LDAA #$01
STAA TIOS
LDAA #$00
STAA TCTL2
LDAA #$01
STAA TFLG1
LDX #46875
ADDX TCNT
STX TC0
CLI
WAIT: BRA W AIT
TC0_ISR:
SEI
LDAA #$01
STAA TFLG1
LDX #46875
ADDX TCNT
STX TC0
LDAA #$7F
STAA PORTB
BSR DELAY
LDAA #$FF
STAA PORTB
CLI
RTI
;************************************************************** ;* Interrupt Vectors *
;************************************************************** ORG $FFEE
FDB TC0_ISR
ORG $FFFE
DC.W Entry ; Reset Vector。