;-------------------------------------------------------------------------*
; 工 程 名: SCIIntRe                                                      *
; 硬件连接: (1)MCU的串口与PC方的COM1相连                                  *  
;           (2)PTBD口接测试小灯
; 程序描述: 通过PC机发送一个命令以控制接在PTA0~PTA7口的8个小灯亮暗状态，各*
;           个小灯初始状态都为暗，首先进行通信测试，PC机发送"A"（65），若 *
;           单片机接收到则8个小灯全亮，并回送字符"A"（65），虽然单片机接收*
;           到但有问题，不是"A"（65），说明有误码，则4个小灯全亮，并回送字*
;           符"0"（48），否则8个小灯全暗无反应，通信测试成功后进入控制状态*
;           PC机发送字符串"11"，PTA0口灯亮；发送"10"，PTA0口灯暗；发送"21"*
;           PTA1口灯亮；发送"20"，PTA1口灯暗；依此类推，当给PTA口发送"01"，*
;           8个小灯全亮，发送"00"，全暗。                                  *
; 目    的: 初步掌握利用查询方式进行串行通信的基本知识                    *
; 说    明: 波特率为9600,使用SCI1口                                       *
;----------------苏州大学飞思卡尔嵌入式系统实验室2009年-------------------*

    INCLUDE 'Includes.inc'         ;总头文件

    XDEF _Startup, main            ;定义可以被外部调用的函数
    XREF __SEG_END_SSTACK 

; 变量段
MY_ZEROPAGE: SECTION  SHORT     ;在此处定义变量
SerialBuff:  DS.B 2

; 代码段
MyCode:      SECTION  

main:
_Startup:
    SEI
    LDHX  #__SEG_END_SSTACK ;初始化堆栈指针               
    TXS                     
    JSR MCUInit             ;芯片初始化  
    JSR SCIInit             ;串口初始化
    LDA #$ff
    STA PTBDD
    LDA #$ff
    STA PTBD
    ;通信连线测试
TestLoop:
     JSR SCIRe1
     BCS TestLoop
     CBEQA #$41,OKTest
     LDA #$0F
     STA PTBD
	 LDA #$32
	 JSR SCISend1
     BRA MainLoop
OKTest:
	 LDA #$00
	 STA PTBD
	 LDA #$41
	 JSR SCISend1
   ;程序总循环入口
MainLoop:
   ;等待接收2个数据
    LDA #2
    LDHX #SerialBuff
    JSR  SCIReN
    BCS  MainLoop           ;若没有收到，则继续等待
    CBEQA #$31,Light		;灯亮的处理
    LDA  SerialBuff		;灯暗的处理
    CBEQA #$30,ALL0		;所有灯都暗
    SUB  #$31				;把字符（1-8）－"1"变成数字（0-7）
    CBEQA #0,L01			;判断是哪个灯要暗
    CBEQA #1,L02
    CBEQA #2,L03
    CBEQA #3,L04
    CBEQA #4,L05
    CBEQA #5,L06
    CBEQA #6,L07
    CBEQA #7,L08
	 JMP  MainLoop 
L01:  
  BSET 0,PTBD           ;PTB0口所接小灯暗
	JMP  MainLoop
L02:  
  BSET 1,PTBD          ;PTB1口所接小灯暗
	JMP  MainLoop
L03:  
  BSET 2,PTBD          ;PTB2口所接小灯暗
	JMP  MainLoop
L04:  
  BSET 3,PTBD          ;PTB3口所接小灯暗
	JMP  MainLoop
L05:  
  BSET 4,PTBD          ;PTB4口所接小灯暗
	JMP  MainLoop
L06:  
  BSET 5,PTBD          ;PTB5口所接小灯暗
	JMP  MainLoop
L07:  
  BSET 6,PTBD          ;PTB6口所接小灯暗
	JMP  MainLoop
L08:  
  BSET 7,PTBD          ;PTB7口所接小灯暗
	JMP  MainLoop
ALL0:
	LDA  #$FF              ;所有灯都暗
	STA  PTBD
	JMP  MainLoop 
Light: 
;亮
  LDA  SerialBuff
  CBEQA #$30,ALL1
  SUB  #$31
  CBEQA #0,L11
  CBEQA #1,L12
  CBEQA #2,L13
  CBEQA #3,L14
  CBEQA #4,L15
  CBEQA #5,L16
  CBEQA #6,L17
  CBEQA #7,L18
	JMP  MainLoop 
L11:  
  BCLR 0,PTBD           ;PTB0口所接小灯亮
	JMP  MainLoop
L12: 
  BCLR 1,PTBD          ;PTB1口所接小灯亮
	JMP  MainLoop
L13:  
  BCLR 2,PTBD          ;PTB2口所接小灯亮
	JMP  MainLoop
L14:  
  BCLR 3,PTBD          ;PTB3口所接小灯亮
	JMP  MainLoop
L15:  
  BCLR 4,PTBD          ;PTB4口所接小灯亮
	JMP  MainLoop
L16:  
  BCLR 5,PTBD          ;PTB5口所接小灯亮
	JMP  MainLoop
L17: 
  BCLR 6,PTBD          ;PTB6口所接小灯亮
	JMP  MainLoop
L18:  
  BCLR 7,PTBD          ;PTB7口所接小灯亮
	JMP  MainLoop
ALL1:
	 LDA  #$00              ;所有灯都亮
	 STA  PTBD
	 JMP  MainLoop
MAIN_EXIT:
     RTS
      
