📄 vidu4-1.s
字号:
;*******************************************************************************
; Vidu4-1.s la chuong trinh viet bang hop ngu de chay tren mot dsPIC *
; Chuong trinh thuc hien viec sau: Xuat chuoi ky tu "Xin chao!" ra cong RS232*
; sau moi giay (1 Hz) *
;*******************************************************************************
; Tac gia : Nguyen Quang Nam *
; Don vi : PIC Viet Nam *
; Ten tap tin : Vidu4-1.s *
; Ngay : 06/04/2006 *
; Phien ban : 0.01 *
; Nhung tap tin can thiet khac: p30F4012.gld, p30f4012.inc *
; Cong cu duoc dung: MPLAB 7.31 *
; ASM30 2.14 *
; LNK30 2.14 *
;-------------------------------------------------------------------------------
; .equ __30F2010, 1
; .equ __30F2011, 1
; .equ __30F2012, 1
; .equ __30F3010, 1
; .equ __30F3011, 1
; .equ __30F3012, 1
; .equ __30F3013, 1
; .equ __30F3014, 1
; .equ __30F4011, 1
.equ __30F4012, 1
; .equ __30F4013, 1
.include "p30fxxxx.inc"
; config __FOSC, CSW_FSCM_OFF & HS
; config __FOSC, CSW_FSCM_OFF & HS2_PLL8
; config __FOSC, CSW_FSCM_OFF & HS2_PLL16
; config __FOSC, CSW_FSCM_OFF & FRC
config __FOSC, CSW_FSCM_OFF & FRC_PLL4
; config __FOSC, CSW_FSCM_OFF & FRC_PLL8
; config __FOSC, CSW_FSCM_OFF & XT_PLL8
; config __FOSC, CSW_FSCM_OFF & XT_PLL16
config __FWDT, WDT_OFF
config __FBORPOR, MCLR_EN & PBOR_OFF
config __FGS, CODE_PROT_OFF
;-------------------------------------------------------------------------------
;Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)
.equiv flag_bit, 0 ;Vi tri cua co cho phep xuat chuoi ky tu
.equiv Fcy, 8000000 ;Tan so thuc thi lenh
.equiv baud, 38400 ;Toc do baud cua cong RS232
;-------------------------------------------------------------------------------
;Cac khai bao toan cuc:
.global __reset ;Khai bao nhan bat dau chuong trinh (bat buoc)
.global __T1Interrupt ;Khai bao toan cuc chuong trinh xu ly ngat Timer 1
;Khai bao bang hang so trong ROM
.section Chuoi1, psv, address(0x0200) ;Chuoi ky tu se xuat ra cong RS232
.asciz "Xin chao! " ;Chuoi ky tu se duoc xuat ra cong RS232
;-------------------------------------------------------------------------------
;Doan ma trong vung nho chuong trinh
.text ;Bat dau doan ma chuong trinh
__reset:
mov #__SP_init, W15 ;Khoi tao con tro ngan xep (stack)
mov #__SPLIM_init, W0
mov W0, SPLIM ;Khoi tao thanh ghi gioi han con tro ngan xep (stack)
nop ;Can mot lenh NOP sau khi ghi vao SPLIM
clr W0 ;Xoa thanh ghi lam viec W0
mov W0, W14 ;Xoa cac thanh ghi W1 den W14
repeat #12
mov W0,[++W14] ;Dia chi cua cac thanh ghi: 0x0002 - 0x001C
clr W14
;-------------------------------------------------------------------------------
rcall Init_TMR1 ;Khoi tao cho TMR1 (tran moi 1 giay)
rcall Init_UART1 ;Khoi tao cong RS232 thu nhat
bclr W1, #flag_bit ;Bit 0 cua W1 la co cho phep xuat ra cong RS232
;khi khoi dong thi se xoa bit
bset CORCON, #PSV ;Cho phep dung PSV
mov #psvpage(Chuoi1), W0 ;Lay dia chi cua chuoi ky tu
mov W0, PSVPAG ;ghi vao thanh ghi trang PSV
main_loop:
btss W1, #flag_bit ;Kiem tra co cho phep xuat
bra main_loop ;Khong duoc phep, vay tiep tuc kiem tra
bclr W1, #flag_bit ;Duoc phep xuat, vay xoa co truoc
mov #psvoffset(Chuoi1), W2 ;W2 la con tro den chuoi ky tu
clr W0 ;Xoa thanh ghi W0, tranh hieu ung le doi voi
;byte cao cua W0 o vong lap xuat chuoi ky tu
wrt_loop:
mov.b [W2++], W0 ;Doc mot ky tu
cp0 W0 ;Da het chuoi chua?
bra z, main_loop ;Da het chuoi, vay tro ve vong lap chinh
mov W0, U1TXREG ;Chua het chuoi, vay xuat ky tu ra
xmt_loop:
btss U1STA, #TRMT ;Da truyen ky tu xong chua?
bra xmt_loop ;Chua xong, tiep tuc cho
bra wrt_loop ;Truyen xong roi, tro ve vong lap xuat ky tu
;;------------------------------------------------------------------------------
;Chuong trinh con khoi tao TMR1
;TMR1 duoc khoi tao de tran sau moi 1 giay tai muc xung 8 Mips (fcy = 8 MHz)
;-------------------------------------------------------------------------------
Init_TMR1:
clr TMR1
mov #0x7A12, W0 ;TMR1 tran moi 1 giay
mov W0, PR1 ;Dat nguong tran vao PR1
bclr IFS0, #T1IF ;Xoa co ngat cua TMR1
mov #0x8030, W0 ;TMR1 dung fcy lam clock, prescale la 1:256,
mov W0, T1CON ;va khoi dong TMR1
bset IEC0, #T1IE ;cho phep ngat khi TMR1 tran
return
;-------------------------------------------------------------------------------
;Chuong trinh con khoi tao module UART1
;-------------------------------------------------------------------------------
Init_UART1:
mov #0x8000, W0 ;bit15=UARTEN bit10=ALTIO, dung Main IO
; mov #0x8400, W0 ;bit15=UARTEN bit10=ALTIO, dung Alt IO
mov W0, U1MODE
mov #0x0400, W0 ;bit10=UTXEN
mov W0, U1STA
mov #(((Fcy/baud)/16)-1), W0 ;Khoi tao toc do baud
mov W0, U1BRG ;=((Fcy/baud)/16) - 1)
return
;-------------------------------------------------------------------------------
;Trinh phuc vu ngat cho TMR1
;Moi 1 giay ngat nay duoc thuc thi. No se bat mot co bao hieu du thoi gian cho
;-------------------------------------------------------------------------------
__T1Interrupt: ;Ten da duoc dinh truoc trong tap tin lien ket
bclr IFS0, #T1IF ;Truoc tien, can xoa co ngat
bset W1, #flag_bit ;Dat co cho phep xuat ky tu ra cong RS232
retfie ;Tro ve tu ngat
;-------------------------------------------------------------------------------
.end ;Ket thuc phan ma trong tap tin nay
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -