⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vidu4-1.s

📁 h&#432 &#7899 ng d&#7851 n v&#7873 dsp tham kh&#7843 o các c&#244 ng c&#7909 c&#417 b&#7843 n
💻 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 + -