由於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
完成