PIC10F200 >> Assembly

UART TX(9600bps)


由於PIC10F200沒有UART功能,因此,司徒只好先使用I/O Toggle的方式製作UART TX,TX比較簡單,只要把時間算好,基本上沒有太大問題,唯一要注意的是,最好不要超過3%的誤差,加上PIC10F200的石英震盪器是使用內部震盪器,難免會有誤差,建議不要使用太快的UART Baudrate,目前司徒使用的UART Baudrate是9600bps,格式為N,8,1,過程說明如下。

UART傳輸協定

9600bps每個bit時間為:1/9600 = 104.167us

main.s

  list p=10f200, r=hex
  #include <p10f200.inc>
  __config _CONFIG, _IntRC_OSC & _WDTE_OFF & _MCLRE_OFF

  #define tmp1        0x10
  #define tmp2        0x11
  #define tmp3        0x12
  #define tmp4        0x13
  #define UART_DELAY  d'28'
  #define UART_PIN    0x02
 
  org 0x00
start:
  movlw b'11000000'
  option

  movlw b'00000000'
  movwf OSCCAL

  movlw b'00001011'
  tris GPIO
  bsf GPIO, UART_PIN

  clrf tmp4
loop:
  movf tmp4, w
  incf tmp4, f
  call uart_send_byte
  call delay
  goto loop

uart_send_byte:
  movwf tmp1
  movlw 0x08
  movwf tmp2

  bcf GPIO, UART_PIN
  movlw UART_DELAY
  movwf tmp3
  decfsz tmp3, f
  goto $-1
u0:
  rrf tmp1, f
  btfss STATUS, C
  bcf GPIO, UART_PIN
  btfsc STATUS, C
  bsf GPIO, UART_PIN
  
  movlw UART_DELAY
  movwf tmp3
  decfsz tmp3, f
  goto $-1

  decfsz tmp2, f
  goto u0
  
  bsf GPIO, UART_PIN
  movlw UART_DELAY
  movwf tmp3
  nop
  decfsz tmp3, f
  goto $-1
  return

delay:
  movlw 0xff
  movwf tmp2
  movlw 0xff
  movwf tmp1
  decfsz tmp1, f
  goto $-1
  decfsz tmp2, f
  goto $-3
  return
  end

編譯

$ gpasm main.s

完成


返回上一頁