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

📄 vidu4-3.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-3.s la chuong trinh viet bang hop ngu de chay tren mot dsPIC		   *
;	Chuong trinh thuc hien viec sau: Thiet lap cac tham so cho RTC DS1307 	   *
;	thong qua giao tiep I2C, su dung module I2C cua dsPIC					   *
;*******************************************************************************

;	Tac gia				: Nguyen Quang Nam									   *

;	Don vi				: PIC Viet Nam										   *

;	Ten tap tin			: Vidu4-3.s											   *

;	Ngay				: 16/08/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	Fcy, 8000000	;Tan so thuc thi lenh
	.equiv	baud, 100000	;Toc do baud cua giao tiep I2C

;-------------------------------------------------------------------------------
;Cac khai bao toan cuc:

	.global __reset			;Khai bao nhan bat dau chuong trinh (bat buoc)

;-------------------------------------------------------------------------------
;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_PORTS		;Khoi tao cac cong I/O
		rcall	Init_I2C		;Khoi tao module I2C
;Buoc 1, tao dieu kien START, cho hoat dong I2C hoan tat
		bset	I2CCON, #SEN	;Tao ra dieu kien START
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
;Buoc 2, xuat dia chi cua RTC voi thao tac ghi, cho va kiem tra ACK
		mov.b	#0xD0, W0		;Xuat dia chi cua RTC DS1307, thao tac ke tiep
		rcall	Send_I2C		;la ghi vao RTC (dia chi cua thanh ghi)
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 3, xuat dia chi cua thanh ghi dich (target), cho va kiem tra ACK
		clr	W0					;Xuat dia chi cua thanh ghi can thao tac
		rcall	Send_I2C
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		clr	W0					;Xuat noi dung cua thanh ghi thu nhat (0x00)
		rcall	Send_I2C		;Thanh ghi dem giay va bit Clock Halt
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		clr	W0					;Xuat noi dung cua thanh ghi thu hai (0x01)
		rcall	Send_I2C		;Thanh ghi dem phut
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		mov.b	#0x67, W0		;Xuat noi dung cua thanh ghi thu ba (0x02)
		rcall	Send_I2C		;Thanh ghi dem gio
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		mov.b	#0x01, W0		;Xuat noi dung cua thanh ghi thu tu (0x03)
		rcall	Send_I2C		;Thanh ghi dem thu trong tuan
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		mov.b	#0x09, W0		;Xuat noi dung cua thanh ghi thu nam (0x04)
		rcall	Send_I2C		;Thanh ghi dem ngay
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		mov.b	#0x04, W0		;Xuat noi dung cua thanh ghi thu sau (0x05)
		rcall	Send_I2C		;Thanh ghi dem thang
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		mov.b	#0x73, W0		;Xuat noi dung cua thanh ghi thu bay (0x06)
		rcall	Send_I2C		;Thanh ghi dem nam
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 4, xuat noi dung cho thanh ghi dich (target), cho va kiem tra ACK
		mov.b	#0x90, W0		;Xuat noi dung cua thanh ghi thu tam (0x07)
		rcall	Send_I2C		;Thanh ghi dieu khien ngo ra SQW/OUT
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		btsc	I2CSTAT, #ACKSTAT		;Kiem tra trang thai ACK
		bra	I2CFail				;Neu NACK thi chuyen dieu khien den I2CFail
;Buoc 5, tao dieu kien STOP, cho hoat dong I2C hoan tat
		bset	I2CCON, #PEN	;Tao ra dieu kien STOP
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		bra	main_loop			;Moi thu deu tot, chuyen den vong lap chinh

I2CFail:
		bset	I2CCON, #PEN	;Tao ra dieu kien STOP
		rcall	Wait_MI2C		;Cho hoat dong I2C hoan tat
		bclr	LATE, #0		;Bat LED noi vao RE0 de bao loi

main_loop:
		nop
		nop
		bra	main_loop			;Vong lap chinh, khong lam gi ca
;-------------------------------------------------------------------------------

;Chuong trinh con khoi tao cac cong I/O, de noi voi LED
;-------------------------------------------------------------------------------
Init_PORTS:
		setm	LATE		;Tat cac LED (anode chung) noi vao cong E
		mov	#0xFFFE, W0		;LED noi vao RE0
		mov	W0, TRISE
		return
;-------------------------------------------------------------------------------

;Chuong trinh con khoi tao module I2C o che do Master
;-------------------------------------------------------------------------------
Init_I2C:
		mov	#0x8200, W0			;bit15=I2CEN, bit9=DISSLW (tat Slew Rate
								;Control cho cac toc do baud khac 400 kbps)
		mov	W0, I2CCON
        mov	#(((Fcy/baud)-(Fcy/1111111))-1), W0	;Khoi tao toc do baud
        mov	W0, I2CBRG			;=((Fcy/baud)-(Fcy/1111111)) - 1)
		return
;-------------------------------------------------------------------------------

;Chuong trinh con xuat 1 byte nam trong W0 (byte thap) dung module I2C
;-------------------------------------------------------------------------------
Send_I2C:
		mov.b	WREG, I2CTRN
		return
;-------------------------------------------------------------------------------

;Chuong trinh con cho hoat dong Master I2C sau cung hoan tat, bang cach kiem tra
;bit MI2CIF trong thanh ghi IFS0
;-------------------------------------------------------------------------------
Wait_MI2C:
		btss	IFS0, #MI2CIF
		bra	$ - 2
		bclr	IFS0, #MI2CIF
		return
;-------------------------------------------------------------------------------

	.end				;Ket thuc phan ma trong tap tin nay

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -