|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
|
18-03-2009, 03:11 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
cần giúp đỡ dspicf6010 chỉ nạp được một lần
Bác nào đã gặp vấn đề này xin chỉ giáo giúp đàn em.
Em đang làm một ứng dụng sử dụng con dspic30f6010a . Mội chương trình thử khác thì nạp đi nạp lại bình thường nhưng chương trình viết thực cho ứng dụng này chỉ nạp được một lần duy nhất khi chíp mới mua về, các lần sau không bao giờ nạp được nữa cho dù là chương trình nào. Dữ liệu đọc ra toàn là số 000 . Mặc dù đã dùnh lệnh xoá chíp. Em không biềt nó sai ở đâu nếu xin các bác chỉ giáo |
19-03-2009, 09:14 AM | #2 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
các bác ơi ai biết vấn đề này xin giúp em với
sáng nay em lại toi thêm một chú nửa rồi
|
20-03-2009, 11:23 AM | #3 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
các cao thủ ơi giúp em vớ
cứ nạp chương trình em viết vào là chíp không thể xôấ gì được nữa . mặc dù chíp vẫn tìm thấy.
|
20-03-2009, 11:26 AM | #4 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
chương trình của em đây
;------------------------------------------------------------------------------
; SER VO DC 24V ; .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 .equ __30F6010A, 1 .include "p30f6010A.inc" .global __reset ;.Khai bao nhan bat dau chuong trinh (bat buoc) ;.global __T1Interrupt ;Khai bao toan cuc chuong trinh xu ly ngat Timer 1 ;.global __ADCInterrupt ;Khai bao toan cuc chuong trinh xu ly ngat ADC ; .global __QEIInterrupt ;Khai bao toan cuc chuong trinh xu ly ngat ADC ; 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_ON ;------------------------------------------------------------------------------ ;Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh) .equiv HUONGE, TRISE ;Thanh ghi trang thai cua port xuat LED .equiv DATAE, LATE ;Thanh ghi chot cua port xuat LED .equiv DOCE, PORTE ;Thanh ghi IN PIN .equiv HUONGG, TRISG ;Thanh ghi trang thai cua port xuat LED .equiv DATAG, LATG ;Thanh ghi chot cua port xuat LED .equiv DOCG, PORTG ;Thanh ghi IN PIN .equiv HUONGF, TRISF ;Thanh ghi trang thai cua port xuat LED .equiv DATAF, LATF ;Thanh ghi chot cua port xuat LED .equiv DOCF, PORTF ;Thanh ghi IN PIN .equiv HUONGB, TRISB ;Thanh ghi trang thai cua port xuat LED .equiv DATAB, LATB ;Thanh ghi chot cua port xuat LED .equiv DOCB, PORTB ;Thanh ghi IN PIN .equiv HUONGD, TRISD ;Thanh ghi trang thai cua port xuat LED .equiv DATAD, LATD ;Thanh ghi chot cua port xuat LED .equiv DOCD, PORTD ;Thanh ghi IN PIN .equiv HUONGC, TRISC ;Thanh ghi trang thai cua port xuat LED .equiv DATAD, LATD ;Thanh ghi chot cua port xuat LED .equiv DOCC, PORTC ;Thanh ghi IN PIN ;; .equiv LED_PORT, PORTE ;LED noi vao cong E ;; .equiv LED_TRIE, TRISE ;Thanh ghi trang thai cua port xuat LED ;; .equiv LED_LAT, LATE ;Thanh ghi chot cua port xuat LED .equ DPWM1, PDC1 .equ DPWM2, PDC2 .equ DPWM3, PDC3 .equ VITRI_EL,POSCNT .equ TUSO,#575 .equ MAUSO,#400 ;.equiv CHOT, 0 .equiv XUNG, 3 .equiv DATA, 2 .equiv XUATDATA,8 .equiv QUETLED1,15 .equiv QUETLED2,14 .equiv QUETLED3,13 .equiv QUETLED4,12 ; DD .equiv CHOTLED1,6 ;FF .equiv CHOTLED2,7 .equiv CHOTLED3,8 .equiv CHOTLED4,2 .equiv CHOTLED5,3 .equiv NUT4,11 ;B .equiv NUT3,10 ;B .equiv NUT2,9 ;B .equiv NUT1,8 ;D .equiv MTOTAL,0 ;B .equiv MCOUNTER,2 ;B .equiv MLENGHT,4 ;B .equiv MTIMER,6 ; .equiv MBCD1,2 ;B .equiv MBCD2,10 ;B .equiv MBCD3,18 ;B .equiv MBCD4,24 ; .equiv MBCD5,32 ; .section .nbss,bss,near MANGSO: .space 20 MANGBCD: .space 40 BIENMANGBCD1: .space 2 BIENMANGBCD2: .space 2 BIENMANGBCD3: .space 2 BIENMANGBCD4: .space 2 BIENMANGBCD5: .space 2 BIENNHAP: .SPACE 2 BIENSANG_TAT: .SPACE 2 BIENNHAPHIM: .SPACE 2 BCD1: .space 2 BCD2: .space 2 BCD3: .space 2 BCD4: .space 2 BCD5: .space 2 HIENTHI1: .space 2 HIENTHI2: .space 2 HIENTHI3: .space 2 HIENTHI4: .space 2 BIENMOD: .space 2 SODEM: .space 2 DICHBIT: .space 2 BIENHIENTHI: .space 2 SODEMLED: .space 2 THOIGIANLED: .space 2 BIENPHIM: .space 2 BIENHAM_DATA: .space 2 THOIGIANPHIM1: .space 2 THOIGIANPHIM2: .space 2 THOIGIANPHIM3: .space 2 LUUTHOIGIAN: .space 2 THOIGIANPHIMPR: .space 2 TOCDOTHUC: .space 2 ; GIAN: .space 2 ; NHAN_ENCODER: .space 2 XUNGDODUOC: .space 2 HESOTHOIGIAN: .space 2 ;XUNGTRENVONG: .space 2 ;THOIGIANLAYMAU: .space 2 BIENTINHTOCDO: .space 2 GOCNGHIENGTHUC: .space 2 ;BIENTU: .space 2 ;BIENMAU: .space 2 LUUGOCZEZO: .space 2 GOCAMDUONG: .space 2 NHAP1: .SPACE 2 NHAP2: .SPACE 2 NHAP3: .SPACE 2 NHAP4: .SPACE 2 TROLCD: .SPACE 2 TROLCD1: .SPACE 2 DEMLCD: .SPACE 2 GIUPTR: .SPACE 2 GIATRIOFSET: .SPACE 2 TFW : .SPACE 2 TRW : .SPACE 2 TDEMW: .SPACE 2 TDEMF: .SPACE 2 GIUPWMMAX:.SPACE 2 HESO_P:.SPACE 2 HESO_PP:.SPACE 2 HESO_I:.SPACE 2 HESO_D:.SPACE 2 HESO_DP:.SPACE 2 GIAN:.SPACE 2 GIAN_D:.SPACE 2 GIAN_I:.SPACE 2 HS_A:.SPACE 2 HS_B:.SPACE 2 HS_C:.SPACE 2 HS_D:.SPACE 2 KQ_H:.SPACE 2 KQ_L:.SPACE 2 BIENTU:.SPACE 2 BIENMAU:.SPACE 2 KETQUA_P:.SPACE 2 KETQUA_I:.SPACE 2 KETQUA_D:.SPACE 2 KETQUA_DH:.SPACE 2 LUUKETQUA_D:.SPACE 2 BIEN_AMDUONG:.SPACE 2 SAISO: .SPACE 2 SAISO_CU:.SPACE 2 LUUSAISO: .SPACE 2 VITRI_DATH: .SPACE 2 VITRI_DATL: .SPACE 2 VITRI_DATHCL: .SPACE 2 VITRI_DATHCH: .SPACE 2 VITRI_EH: .SPACE 2 VITRI_CNTL: .SPACE 2 VITRI_CNTH: .SPACE 2 NHAN_ENCODER: .SPACE 2 OUTPWM_MAX: .SPACE 2 OUTPWM_MIN: .SPACE 2 OUTPWM_CNT: .SPACE 2 TIMER1_OLD: .SPACE 2 TIMER2_OLD: .SPACE 2 OUTPWM: .SPACE 2 OUTPWMMAX: .SPACE 2 TIMERLOI: .SPACE 2 VANTOCLOI: .SPACE 2 ADC_DONG: .SPACE 2 THOIGIAN1: .SPACE 2 THOIGIAN2: .SPACE 2 THOIGIAN3: .SPACE 2 THOIGIAN4: .SPACE 2 THOIGIANBAOVE: .SPACE 2 THOIGIANBAOVEDONG: .SPACE 2 HIENTHILOI: .SPACE 2 BCDT1: .SPACE 2 BCDT2: .SPACE 2 BCDT3: .SPACE 2 BCDT4: .SPACE 2 BCDT5: .SPACE 2 BCDD1: .SPACE 2 BCDD2: .SPACE 2 BCDD3: .SPACE 2 BCDD4: .SPACE 2 BCDD5: .SPACE 2 BCDA1: .SPACE 2 BCDA2: .SPACE 2 BCDA3: .SPACE 2 BCDA4: .SPACE 2 BCDA5: .SPACE 2 BCDV1: .SPACE 2 BCDV2: .SPACE 2 BCDV3: .SPACE 2 BCDV4: .SPACE 2 BCDV5: .SPACE 2 ;------------------------------------------------------------------------------ ;Cac khai bao toan cuc: ;------------------------------------------------------------------------------ .section .const,psv .align 256 Table_LED: .Hword 0B1111111100001100,0B1111111110011111,0B1111111100 111000,0B1111111100011010,0B1111111110001011,0B111 1111101001010,0B1111111101001000,0B111111110001111 1,0B1111111100001000,0B1111111100001010, 0B1111111101100001,0B1111111111111111,0B1111111111 111011,0B1111111101100000,0B1111111111110001 ; 0 1 2 3 4 5 6 7 8 9 10 - E R SineTable: .Hword 0,1,2,3,4,5,6,7,8,9,10 SineTable1: .Hword 'T','O','C',' ','D','O',':',' ',' ',' ','0','0','0','0,'0',' ',' ','R','P','M' .Hword 'D','O','N',' ','D','I',':',' ',' ',' ','0','0','0','0,'0',' ',' ','A','M','P' .Hword 'V','I',' ','T','R','I',':',' ',' ',' ','0','0','0','0,'0',' ',' ',' ',' ',' ' .Hword 'D','I','E','N',' ','A',':',' ',' ',' ','0','0','0','0,'0',' ',' ','V','O','L' SineTable3: .Hword '0','1','2','3','4','5','6','7','8','9' SineTable4: .Hword 0X0A,0X0B,0X0C,0X0D,0X0E .HWORD 0X4A,0X4B,0X4C,0X4D,0X4E .HWORD 0X1E,0X1F,0X20,0X21,0X22 .HWORD 0X5E,0X5F,0X60,0X61,0X62 .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_PORTG ;Khoi tao cac cong I/O rcall Init_PORTE ;Khoi tao cac cong I/O rcall Init_PORTb ; init_portb rcall Init_PORTC ; init_portC RCALL Init_PORTD RCALL Init_PORTF ; rcall init_adc ; RCALL init_pwm_motor rcall UNIt_QEI rcall Init_TMR1 rcall Init_TMR2 RCALL KHOIDONGLED ;************************************************* ************************** ;************************************************* ************************************************** ****************************** ;************************************************* ************************************************** ****************************** main_loop: RCALL KIEMXUNGVAO btss IFS2,#PWMIF ; poll the PWM interrupt flag BRA main_loop;g RCALL CHUONGTRINHHIENTHI RCALL BANPHIM bclr IFS2, #PWMIF ; Clear the PWM interrupt flag main_loopg: BRA main_loop MOV VITRI_EL,W0 MOV VITRI_DATL,W2 SUB W0,W2,W4 MOV W4,SAISO MOV W4,LUUSAISO BRA C,CHAY_RW CHAY_FW: SUB W2,W0,W4 MOV W4,LUUSAISO MOV W4,SAISO MOV #60000,W5 SUB W4,W5,W6 BRA C,CHAY_RWW RCALL TINH_PIDFW BRA main_loop CHAY_FWW: SUB W2,W0,W4 MOV W4,SAISO MOV W4,LUUSAISO RCALL TINH_PIDFW BRA main_loop CHAY_RW: MOV #60000,W5 SUB W4,W5,W6 BRA C,CHAY_FWW RCALL TINH_PIDRW BRA main_loop CHAY_RWW: SUB W0,W2,W4 MOV W4,SAISO MOV W4,LUUSAISO RCALL TINH_PIDRW BRA main_loop bra main_loop ;************************************************* ************************************************** *************************** ;************************************************* ************************************************** *************************** ;9999999999999999999999999999999999999999999999999 99999999999999999 CHUONGTRINHHIENTHI: dec THOIGIANLED bra NZ, THOATLED MOV #10,W0 MOV W0,THOIGIANLED BTSS SODEMLED,#0 BRA RALED2 RCALL SULILED BCLR DATAD,#QUETLED1 RCALL BANPHIM1 RALED2: BTSS SODEMLED,#1 BRA RALED3 INC BIENMANGBCD1 INC BIENMANGBCD2 INC BIENMANGBCD3 INC BIENMANGBCD4 INC BIENMANGBCD5 RCALL KIEMTRANHAY RCALL SULILED BCLR DATAD,#QUETLED2 RCALL BANPHIM2 RALED3: BTSS SODEMLED,#2 BRA RALED4 INC BIENMANGBCD1 INC BIENMANGBCD2 INC BIENMANGBCD3 INC BIENMANGBCD4 INC BIENMANGBCD5 RCALL KIEMTRANHAY RCALL SULILED BCLR DATAD,#QUETLED3 RCALL BANPHIM3 RALED4: BTSS SODEMLED,#3 BRA RALED5 INC BIENMANGBCD1 INC BIENMANGBCD2 INC BIENMANGBCD3 INC BIENMANGBCD4 INC BIENMANGBCD5 RCALL KIEMTRANHAY RCALL SULILED BCLR DATAD,#QUETLED4 RCALL BANPHIM4 MOV #MBCD1,W0 MOV W0,BIENMANGBCD1 MOV #MBCD2,W0 MOV W0,BIENMANGBCD2 MOV #MBCD3,W0 MOV W0,BIENMANGBCD3 MOV #MBCD4,W0 MOV W0,BIENMANGBCD4 MOV #MBCD5,W0 MOV W0,BIENMANGBCD5 DEC BIENSANG_TAT BRA NZ,RALED5 MOV #200,W0 MOV W0,BIENSANG_TAT RALED5: MOV SODEMLED,W0 ADD SODEMLED MOV SODEMLED,W0 MOV #15,W1 SUB W0,W1,W2 BRA C,THOATLED1 RETURN THOATLED1: MOV W2,SODEMLED THOATLED: RETURN ;************************************************* *********************** SULILED: MOV #MANGBCD,W0 ADD BIENMANGBCD1 MOV BIENMANGBCD1,W1 MOV [W1],W0 MOV #2,W1 MOV W1,NHAP1 MUL NHAP1 MOV W2,W0 RCALL LAYBANG MOV W0,DATAD ; 8 BIT THAP BCLR DATAF,#CHOTLED1 BSET DATAF,#CHOTLED1 MOV #MANGBCD,W0 ADD BIENMANGBCD2 MOV BIENMANGBCD2,W1 MOV [W1],W0 MOV #2,W1 MOV W1,NHAP1 MUL NHAP1 MOV W2,W0 RCALL LAYBANG MOV W0,DATAD ; 8 BIT THAP BCLR DATAF,#CHOTLED2 BSET DATAF,#CHOTLED2 MOV #MANGBCD,W0 ADD BIENMANGBCD3 MOV BIENMANGBCD3,W1 MOV [W1],W0 MOV #2,W1 MOV W1,NHAP1 MUL NHAP1 MOV W2,W0 RCALL LAYBANG MOV W0,DATAD ; 8 BIT THAP BCLR DATAF,#CHOTLED3 BSET DATAF,#CHOTLED3 MOV #MANGBCD,W0 ADD BIENMANGBCD4 MOV BIENMANGBCD4,W1 MOV [W1],W0 MOV #2,W1 MOV W1,NHAP1 MUL NHAP1 MOV W2,W0 RCALL LAYBANG MOV W0,DATAD ; 8 BIT THAP BCLR DATAF,#CHOTLED4 BSET DATAF,#CHOTLED4 MOV #MANGBCD,W0 ADD BIENMANGBCD5 MOV BIENMANGBCD5,W1 MOV [W1],W0 MOV #2,W1 MOV W1,NHAP1 MUL NHAP1 MOV W2,W0 RCALL LAYBANG MOV W0,DATAD ; 8 BIT THAP BCLR DATAF,#CHOTLED5 BSET DATAF,#CHOTLED5 RETURN ;*********************** ;************************************** LAYBANG: ; IN W0 OUT W0 MOV W0,W3 mov #tblpage(Table_LED),W0 mov W0,TBLPAG mov #tbloffset(Table_LED),W0 ADD W0,W3,W1 TBLRDL [W1],W0 RETURN ;********************** ;0000000000000000000000000000000000000000000000000 00000000000000000 KIEMTRANHAY: MOV BIENSANG_TAT,W0 MOV #50,W1 CPSLT W0,W1 ;; SKIP IF < RETURN MOV #10,W0 BTSC BIENNHAP,#0 MOV W0,BIENMANGBCD1 BTSC BIENNHAP,#1 MOV W0,BIENMANGBCD2 BTSC BIENNHAP,#2 MOV W0,BIENMANGBCD3 BTSC BIENNHAP,#3 MOV W0,BIENMANGBCD4 BTSC BIENNHAP,#4 MOV W0,BIENMANGBCD5 RETURN ;8888888888888888888888888888888888888888888888888 888888888888888 KHOIDONGLED: MOV #0,W0 MOV W0,BIENNHAP MOV #200,W0 MOV W0,BIENSANG_TAT ;>50 SANG MOV #0,W0 MOV W0,BIENNHAPHIM RETURN ;************************************************* ********************8 DIEUKHIENHIENTHILOI: MOV HIENTHILOI,W0 RCALL TINHCHUNG MOV #27,W0 MOV W0,HIENTHI1 MOV #29,W0 MOV W0,HIENTHI2 RETURN ;******************************************** TINHCHUNG: ;GIATRI>>W0 RCALL HEXTOBCD MOV #2,W0 MUL BCD2 ; LAY 4 SO CUOI MOV W2,HIENTHI1 MOV #2,W0 MUL BCD3 MOV W2,HIENTHI2 MOV #2,W0 MUL BCD4 MOV W2,HIENTHI3 MOV #2,W0 MUL BCD5 MOV W2,HIENTHI4 RETURN ;*********************************CHUONG TRINH SU DUNG LCD*************************** ;------------------------------------------------------------------- ;************************************************* ************************************************** ****************************** BANPHIM1: F1: BTSC DOCD,#NUT1 BRA F2 BTSC BIENNHAPHIM,#0 RETURN BSET BIENNHAPHIM,#0 F2: BTSC DOCD,#NUT2 BRA F3 BTSC BIENNHAPHIM,#1 RETURN BSET BIENNHAPHIM,#1 F3: BTSC DOCD,#NUT3 BRA F4 BTSC BIENNHAPHIM,#2 RETURN BSET BIENNHAPHIM,#2 F4: BTSC DOCD,#NUT4 BRA FF4 BTSC BIENNHAPHIM,#3 RETURN BSET BIENNHAPHIM,#3 FF4: MOV #0,W0 MOV W0,BIENNHAPHIM RETURN ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIII BANPHIM2: DEL: BTSC DOCD,#NUT1 BRA P1 BTSC BIENNHAPHIM,#0 RETURN BSET BIENNHAPHIM,#0 P1: BTSC DOCD,#NUT2 BRA P4 BTSC BIENNHAPHIM,#1 RETURN BSET BIENNHAPHIM,#1 P4: BTSC DOCD,#NUT3 BRA P7 BTSC BIENNHAPHIM,#2 RETURN BSET BIENNHAPHIM,#2 P7: BTSC DOCD,#NUT4 BRA PP7 BTSC BIENNHAPHIM,#3 RETURN BSET BIENNHAPHIM,#3 PP7: MOV #0,W0 MOV W0,BIENNHAPHIM RETURN ;999999999999999999999999999999999999999 BANPHIM3: P0: BTSC DOCD,#NUT1 BRA P2 BTSC BIENNHAPHIM,#0 RETURN BSET BIENNHAPHIM,#0 P2: BTSC DOCD,#NUT2 BRA P5 BTSC BIENNHAPHIM,#1 RETURN BSET BIENNHAPHIM,#1 P5: BTSC DOCD,#NUT3 BRA P8 BTSC BIENNHAPHIM,#2 RETURN BSET BIENNHAPHIM,#2 P8: BTSC DOCD,#NUT4 BRA PP8 BTSC BIENNHAPHIM,#3 RETURN BSET BIENNHAPHIM,#3 PP8: MOV #0,W0 MOV W0,BIENNHAPHIM RETURN ;999999999999999999999999999999999999999 BANPHIM4: OK: BTSC DOCD,#NUT1 BRA P3 BTSC BIENNHAPHIM,#0 RETURN BSET BIENNHAPHIM,#0 P3: BTSC DOCD,#NUT2 BRA P6 BTSC BIENNHAPHIM,#1 RETURN BSET BIENNHAPHIM,#1 P6: BTSC DOCD,#NUT3 BRA P9 BTSC BIENNHAPHIM,#2 RETURN BSET BIENNHAPHIM,#2 P9: BTSC DOCD,#NUT4 BRA PP9 BTSC BIENNHAPHIM,#3 RETURN BSET BIENNHAPHIM,#3 PP9: MOV #0,W0 MOV W0,BIENNHAPHIM RETURN ;999999999999999999999999999999999999999 KIEMTRALOI: MOV DPWM1,W0 MOV DPWM2,W1 ADD W0,W1,W5 MOV #100,W4 repeat #17 DIV.U W5,W4 ;W5/W4=W0; REM=W1 MOV #5,W2 MOV W2,NHAP1 MUL NHAP1 DALOI: CLR W0 MOV W0,DPWM1 MOV W0,DPWM2 BRA DALOI RETURN ;================================================= === KIEMTRALOIDONG: MOV OUTPWM,W0 MOV #40000,W1 SUB W1,W0,W2 BRA C,NOLOIW MOV #51,W0 MOV W0,HIENTHILOI BRA DALOIDONG NOLOIW: BTSS DOCE,#4 BRA LOIDONGTG MOV #50000,W0 MOV W0,THOIGIANBAOVEDONG CHUALOIDONG: RETURN LOIDONGTG: DEC THOIGIANBAOVEDONG BRA NZ,CHUALOIDONG MOV #50,W0 MOV W0,HIENTHILOI DALOIDONG: CLR W0 MOV W0,DPWM1 MOV W0,DPWM2 BCLR PWMCON1,#PEN3H ; NGO RA CHAN PWM3H BCLR PWMCON1,#PEN2H ; NGO RA CHAN PWM3H BCLR PWMCON1,#PEN2L ; NGO RA CHAN PWM3H BCLR PWMCON1,#PEN1H ; NGO RA CHAN PWM3H BCLR PWMCON1,#PEN1L ; NGO RA CHAN PWM3H >> I/O btss IFS2,#PWMIF ; poll the PWM interrupt flag BRA DALOIDONG bclr IFS2, #PWMIF ; Clear the PWM interrupt flag RCALL DIEUKHIENHIENTHILOI RCALL CHUONGTRINHHIENTHI BRA DALOIDONG RETURN ;************************************************* ***88 CHAYTHU: DEC THOIGIAN2 BRA NZ,OUTRR MOV #1,W0 MOV W0,THOIGIAN2 DEC THOIGIAN1 BRA NZ,OUTRR MOV #1,W0 MOV W0,THOIGIAN1 BTSS BIEN_AMDUONG,#10 BRA NGUOC MOV #1,W0 ADD VITRI_DATHCL ;RCALL XUNGDI CLR W0 ADDC VITRI_DATHCH DEC THOIGIAN3 BRA NZ,BBC MOV #40000,W0 MOV W0,THOIGIAN3 MOV #65000,W0 MOV W0,THOIGIAN2 MOV W0,THOIGIAN1 BCLR BIEN_AMDUONG,#10 BBC: RETURN NGUOC: MOV #1,W0 SUB VITRI_DATHCL CLR W0 SUBB VITRI_DATHCH DEC THOIGIAN3 BRA NZ,BBC MOV #40000,W0 MOV W0,THOIGIAN3 MOV #65000,W0 MOV W0,THOIGIAN2 MOV W0,THOIGIAN1 BSET BIEN_AMDUONG,#10 BBCC: RETURN OUTRR: RETURN ;************************************************* ****************** KIEMXUNGVAO: MOV TIMER1_OLD,W1 MOV TMR1,W0 MOV W0,TIMER1_OLD SUB W0,W1,W0 ADD VITRI_DATHCL ;RCALL XUNGDI CLR W0 ADDC VITRI_DATHCH MOV TIMER2_OLD,W1 MOV TMR2,W0 MOV W0,TIMER2_OLD SUB W0,W1,W0 SUB VITRI_DATHCL CLR W0 SUBB VITRI_DATHCH MOV VITRI_DATHCL,W0 MOV VITRI_DATHCH,W1 MOV VITRI_CNTL,W2 MOV VITRI_CNTH,W3 SUB W0,W2,W4 SUBB W1,W3,W5 BRA C,DUONG SUB W2,W0,W4 SUBB W3,W1,W5 MOV W4,HS_B MOV W5,HS_A MOV BIENTU,W0 MOV W0,HS_C MOV BIENMAU,W0 MOV W0,HS_D RCALL HAMTINHTISO MOV VITRI_CNTL,W2 MOV VITRI_CNTH,W3 MOV KQ_L,W0 MOV KQ_H,W1 SUB W2,W0,W4 SUBB W3,W1,W5 MOV W4,VITRI_DATL MOV W5,VITRI_DATH RETURN DUONG: MOV W4,HS_B MOV W5,HS_A MOV BIENTU,W0 MOV W0,HS_C MOV BIENMAU,W0 MOV W0,HS_D RCALL HAMTINHTISO MOV VITRI_CNTL,W2 MOV VITRI_CNTH,W3 MOV KQ_L,W0 MOV KQ_H,W1 ADD W2,W0,W4 ADDC W3,W1,W5 MOV W4,VITRI_DATL MOV W5,VITRI_DATH RETURN ;================================================= ===== HAMTINHTISO: ; KQ:=(AB *C)/D MOV HS_A,W0 MUL HS_C MOV W2,W4 MOV W3,W5 MOV HS_B,W0 MUL HS_C ADD W3,W4,W3 CLR W1 ADDC W5,W1,W4 ; W4,W3,W2 HIT MOV W2,NHAP2 ; >>T MOV W3,W6 MOV W4,W7 MOV HS_D,W5 ; 1024 repeat #17 DIV.ud W6,W5 ;Unsigned divide: (Wm + 1:Wm)/Wn ? W0; Rem ? W1 MOV W0,KQ_H MOV W1,W0 ; SO DU MOV #0XFFFF,W5 MOV W5,NHAP1 MUL NHAP1 ; >> W3,W2 ADD W2,W1,W2 ;+1 W1 CLR W1 ADDC W3,W1,W3 ; MOV NHAP2,W1 ADD W2,W1,W6 CLR W1 ADDC W3,W1,W7 MOV HS_D,W5 ; 1024 repeat #17 DIV.ud W6,W5 ;Unsigned divide: (Wm + 1:Wm)/Wn ? W0; Rem ? W1 MOV W0,KQ_L RETURN ;************************************************* ******** TINH_PIDRW: MOV SAISO,W0 MUL HESO_P ;>>W3,W2 MOV W2,W6 MOV W3,W7 MOV HESO_PP,W5 ; 1024 repeat #17 DIV.ud W6,W5 ;Unsigned divide: (Wm + 1:Wm)/Wn ? W0; Rem ? W1 MOV W0,KETQUA_P BTSC BIEN_AMDUONG,#2 RCALL TRUHAM_DRW BTSS BIEN_AMDUONG,#2 RCALL CONGHAM_DRW MOV KETQUA_D,W0 MOV W0,HS_B MOV KETQUA_DH,W0 MOV W0,HS_A MOV HESO_D,W0 MOV W0,HS_C MOV HESO_DP,W0 MOV W0,HS_D RCALL HAMTINHTISO MOV KQ_L,W0 MOV W0,LUUKETQUA_D BTSS BIEN_AMDUONG,#0 RCALL TINHHIEU_KI BTSC BIEN_AMDUONG,#0 RCALL TINHTONG_KI MOV HESO_I,W0 MUL KETQUA_I MOV W2,KETQUA_I BCLR BIEN_AMDUONG,#0 MOV KETQUA_P,W0 MOV W0,OUTPWM MOV KETQUA_I,W0 BTSS BIEN_AMDUONG,#1 BRA TRRW ADD OUTPWM RWOK: BCLR BIEN_AMDUONG,#3 MOV LUUKETQUA_D,W0 BTSS BIEN_AMDUONG,#2 ADD OUTPWM BTSC BIEN_AMDUONG,#2 RCALL TRUHAMPP BTSC BIEN_AMDUONG,#3 BRA KIEMMMR KMAXR: MOV OUTPWMMAX,W1 MOV OUTPWM,W0 SUB W1,W0,W2 BRA C,OKL MOV W1,W0 OKL: MOV W0,DPWM1 CLR W0 MOV W0,DPWM2 RETURN TRRW: SUB OUTPWM BRA C,RWOK ;>> CONG THEM PD MOV KETQUA_P,W1 MOV KETQUA_I,W0 SUB W0,W1,W0 MOV W0,OUTPWM BCLR BIEN_AMDUONG,#3 MOV LUUKETQUA_D,W0 BTSC BIEN_AMDUONG,#2 ADD OUTPWM BTSS BIEN_AMDUONG,#2 ; THIEU PHAIVIET THEM IF PI#0 RCALL TRUHAMPP ; VAN DUNG BTSC BIEN_AMDUONG,#3 BRA KMAXR KIEMMMR: MOV OUTPWMMAX,W1 ;KIEMMAX MOV OUTPWM,W0 SUB W1,W0,W2 BRA C,OKLE MOV W1,W0 OKLE: MOV W0,DPWM2 CLR W0 MOV W0,DPWM1 RETURN ;********************************************** TINH_PIDFW: MOV SAISO,W0 MUL HESO_P ;>>W3,W2 MOV W2,W6 MOV W3,W7 MOV HESO_PP,W5 ; 1024 repeat #17 DIV.ud W6,W5 ;Unsigned divide: (Wm + 1:Wm)/Wn ? W0; Rem ? W1 MOV W0,KETQUA_P BTSS BIEN_AMDUONG,#2 RCALL TRUHAM_DFW BTSC BIEN_AMDUONG,#2 RCALL CONGHAM_DFW MOV KETQUA_D,W0 MOV W0,HS_B MOV KETQUA_DH,W0 MOV W0,HS_A MOV HESO_D,W0 MOV W0,HS_C MOV HESO_DP,W0 MOV W0,HS_D RCALL HAMTINHTISO MOV KQ_L,W0 MOV W0,LUUKETQUA_D BTSC BIEN_AMDUONG,#0 RCALL TINHHIEU_KI BTSS BIEN_AMDUONG,#0 RCALL TINHTONG_KI MOV HESO_I,W0 MUL KETQUA_I MOV W2,KETQUA_I BSET BIEN_AMDUONG,#0 MOV KETQUA_P,W0 MOV W0,OUTPWM MOV KETQUA_I,W0 BTSS BIEN_AMDUONG,#1 BRA TRFW ADD OUTPWM FWOK: BCLR BIEN_AMDUONG,#3 MOV LUUKETQUA_D,W0 BTSC BIEN_AMDUONG,#2 ADD OUTPWM BTSS BIEN_AMDUONG,#2 RCALL TRUHAMPP BTSC BIEN_AMDUONG,#3 BRA KIEMMMF KMAXF: MOV OUTPWMMAX,W1 MOV OUTPWM,W0 SUB W1,W0,W2 BRA C,OKLR MOV W1,W0 OKLR: MOV W0,DPWM2 CLR W0 MOV W0,DPWM1 RETURN TRFW: SUB OUTPWM BRA C,FWOK MOV KETQUA_P,W2 MOV KETQUA_I,W1 SUB W1,W2,W0 MOV W0,OUTPWM BCLR BIEN_AMDUONG,#3 MOV LUUKETQUA_D,W0 BTSS BIEN_AMDUONG,#2 ADD OUTPWM BTSC BIEN_AMDUONG,#2 ; THIEU PHAIVIET THEM IF PI#0 RCALL TRUHAMPP ;VAN DUNG BTSC BIEN_AMDUONG,#3 BRA KMAXF KIEMMMF: MOV OUTPWMMAX,W1 MOV OUTPWM,W0 SUB W1,W0,W2 BRA C,OKLV MOV W1,W0 OKLV: MOV W0,DPWM1 CLR W0 MOV W0,DPWM2 RETURN ;00000000000000000000000000000000000000000000 TRUHAMPP: MOV OUTPWM,W1 SUB W1,W0,W2 BRA C,FGHJ SUB W0,W1,W2 MOV W2,OUTPWM BSET BIEN_AMDUONG,#3 RETURN FGHJ: MOV W2,OUTPWM RETURN ;*********************************************** TINHHIEU_KI: MOV SAISO,W0 MOV SAISO_CU,W1 SUB W0,W1,W2 BRA C,DRW SUB W1,W0,W2 MOV W2,KETQUA_I BCLR BIEN_AMDUONG,#1 ; DANGAM MOV SAISO,W0 MOV W0,SAISO_CU RETURN DRW: BSET BIEN_AMDUONG,#1 MOV W2,KETQUA_I ; DUONG MOV SAISO,W0 MOV W0,SAISO_CU RETURN ;====================== TINHTONG_KI: MOV SAISO,W0 MOV W0,KETQUA_I MOV SAISO_CU,W0 ADD KETQUA_I BSET BIEN_AMDUONG,#1 ;DANG DUONG MOV SAISO,W0 MOV W0,SAISO_CU RETURN ;======================== TRUHAM_DRW: MOV SAISO,W0 MOV KETQUA_D,W1 MOV #0,W3 MOV KETQUA_DH,W4 SUB W0,W1,W2 SUBB W3,W4,W5 BRA C,OKTRUD SUB W1,W0,W2 CLR W0 SUBB KETQUA_DH ;>>DH MOV W2,KETQUA_D BSET BIEN_AMDUONG,#2 RETURN OKTRUD: MOV W2,KETQUA_D MOV W5,KETQUA_DH BCLR BIEN_AMDUONG,#2 RETURN ;======================== CONGHAM_DRW: MOV SAISO,W0 ADD KETQUA_D CLR W0 ADDC KETQUA_DH BCLR BIEN_AMDUONG,#2 RETURN ;=============================================== TRUHAM_DFW: MOV SAISO,W0 MOV KETQUA_D,W1 MOV #0,W3 MOV KETQUA_DH,W4 SUB W0,W1,W2 SUBB W3,W4,W5 BRA C,OKTRUDF SUB W1,W0,W2 CLR C SUBB KETQUA_DH MOV W2,KETQUA_D BCLR BIEN_AMDUONG,#2 RETURN OKTRUDF: MOV W2,KETQUA_D MOV W5,KETQUA_DH BSET BIEN_AMDUONG,#2 RETURN ;======================== CONGHAM_DFW: MOV SAISO,W0 ADD KETQUA_D CLR W0 ADDC KETQUA_DH BSET BIEN_AMDUONG,#2 RETURN ;8888888888888888888888888888888888888888888888888 8888888888888888888888 XACDINHHESO_K_I_D: MOV GIAN,W0 MOV #1000,W1 SUB W0,W1,W2 BRA C,RAKP SUB W1,W0,W0 MOV #10,W1 MOV W1,HESO_P MOV W1,HESO_PP ADD HESO_PP ;>0.01<KP<100 RETURN RAKP: MOV #10,W1 MOV W1,HESO_P MOV W1,HESO_PP MOV W2,W0 ADD HESO_P RETURN ;8888888888888888888888888888888888888888888888888 8888888888888888888888 XACDINHHESO_HESOD: MOV GIAN_D,W0 MOV #1500,W1 SUB W0,W1,W2 BRA C,RAKPD SUB W1,W0,W0 MOV #1,W1 MOV W1,HESO_D MOV W1,HESO_DP ADD HESO_DP ;>0.01<KP<100 RETURN RAKPD: MOV #1,W1 MOV W1,HESO_D MOV W1,HESO_DP MOV W2,W0 ADD HESO_D RETURN ;99999999999999999999999999999999999999999999 HIEUCHINH_GEAR: MOV #0,W0 MOV W0,VITRI_DATHCL MOV W0,VITRI_CNTL MOV W0,VITRI_DATL MOV W0,VITRI_EL MOV #0X7FFF,W0 MOV W0,VITRI_DATHCH MOV W0,VITRI_CNTH MOV W0,VITRI_DATH MOV W0,VITRI_EH RETURN ;8888888888888888888888888888888888888888888888888 8888888888888888888888 XACDINHHESO_HESOI: MOV GIAN_I,W0 MOV W0,HESO_I RETURN ;************************************************* ****************** DOCADC: btss IFS0, #ADIF RETURN bclr IFS0, #ADIF MOV ADCBUF0, W3 ; MOV W3,HESO_I MOV #10,W4 repeat #17 DIV.S W3,W4 MOV W0,HESO_P RETURN ;************************************************* ***************88********************************* ********************************** ;***************************CHUONG TRINH SU DUNG HIEN THI LED********************************************888 888888888888********************** BANPHIM: BTSC DOCD,#NUT1 BRA PH2 RCALL SULIPRO RETURN PH2: BTSC DOCB,#NUT4 BRA PH3 RCALL SULIGIAM RETURN PH3: BTSC DOCB,#NUT2 BRA PH4 RCALL SULITANG RETURN PH4: BTSC DOCB,#NUT3 BRA NOTPHIM RCALL SULIDATA_MOD RETURN NOTPHIM: CLR W0 MOV W0,BIENPHIM MOV #4,W0 MOV W0,THOIGIANPHIM1 MOV #20,W0 MOV W0,THOIGIANPHIM2 MOV #7,W0 MOV W0,THOIGIANPHIM3 MOV #32,W0 MOV W0,LUUTHOIGIAN MOV #2000,W0 MOV W0,THOIGIANPHIMPR RETURN ;------------------------------------ SULIPRO: dec THOIGIANPHIMPR bra NZ,CHUAPR MOV #50000,W0 ;2000 MOV W0,THOIGIANPHIMPR BTSC BIENPHIM,#NUT1 RETURN BSET BIENPHIM,#NUT1 MOV BIENHIENTHI,W0 MOV #1,W1 CPSGT W0,W1 BRA DANGCHAY MOV BIENMOD,W0 MOV W0,BIENHIENTHI BCLR BIENHAM_DATA,#0 rcall GHI_EEPROM RCALL DATMAUTOCDO RETURN DANGCHAY: MOV #2,W0 MOV W0,BIENHIENTHI BSET BIENHAM_DATA,#0 CHUAPR: RETURN ;********************************* SULIGIAM: MOV BIENHIENTHI,W0 MOV #1,W1 CPSGT W0,W1 ;; SKIP IF > RETURN BTSS BIENHAM_DATA,#0 BRA GDATA MOV BIENHIENTHI,W0 MOV #2,W1 CPSGT W0,W1 RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0,BIENHIENTHI RETURN GDATA: MOV BIENHIENTHI,W0 MOV #2,W1 CPSNE W0,W1 BRA GTHT2 MOV #3,W1 CPSNE W0,W1 BRA GTHT3 MOV #4,W1 CPSNE W0,W1 BRA GTHT4 MOV #5,W1 CPSNE W0,W1 BRA GTHT5 MOV #6,W1 CPSNE W0,W1 BRA GTHT6 MOV #7,W1 CPSNE W0,W1 BRA GTHT7 MOV #8,W1 CPSNE W0,W1 BRA GTHT8 GTHT2: MOV BIENMAU,W0 MOV #1,W1 CPSGT W0,W1 ; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0,BIENMAU RCALL HIEUCHINH_GEAR RETURN GTHT3: MOV BIENTU,W0 MOV #1,W1 CPSGT W0,W1 ;; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0,BIENTU RCALL HIEUCHINH_GEAR RETURN GTHT4: MOV GIAN,W0 MOV #0,W1 CPSGT W0,W1 ;; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0, GIAN RCALL XACDINHHESO_K_I_D RETURN GTHT5: MOV NHAN_ENCODER,W0 MOV #0,W1 CPSGT W0,W1 ;; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0, NHAN_ENCODER RCALL THONGSO_ENCODER RETURN GTHT6: MOV GIAN_D,W0 MOV #1,W1 CPSGT W0,W1 ;; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0,GIAN_D RCALL XACDINHHESO_HESOD RETURN GTHT7: MOV GIAN_I,W0 MOV #0,W1 CPSGT W0,W1 ;; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0,GIAN_I RCALL XACDINHHESO_HESOI RETURN GTHT8: MOV LUUGOCZEZO,W0 MOV #1,W1 CPSGT W0,W1 ;; SKIP IF > RETURN MOV W0,NHAP1 RCALL HAMGIAM MOV NHAP1,W0 MOV W0,LUUGOCZEZO RETURN ;********************************** SULITANG: MOV BIENHIENTHI,W0 MOV #1,W1 CPSGT W0,W1 ;; SKIP IF > RETURN BTSS BIENHAM_DATA,#0 BRA TDATA MOV BIENHIENTHI,W0 MOV #8,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0,BIENHIENTHI RETURN TDATA: MOV BIENHIENTHI,W0 MOV #2,W1 CPSNE W0,W1 BRA THT2 MOV #3,W1 CPSNE W0,W1 BRA THT3 MOV #4,W1 CPSNE W0,W1 BRA THT4 MOV #5,W1 CPSNE W0,W1 BRA THT5 MOV #6,W1 CPSNE W0,W1 BRA THT6 MOV #7,W1 CPSNE W0,W1 BRA THT7 MOV #8,W1 CPSNE W0,W1 BRA THT8 THT2: MOV BIENMAU,W0 MOV #9999,W1 CPSLT W0,W1 ;; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0,BIENMAU RCALL HIEUCHINH_GEAR RETURN THT3: MOV BIENTU,W0 MOV #9999,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0,BIENTU RCALL HIEUCHINH_GEAR RETURN THT4: MOV GIAN,W0 MOV #2000,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0, GIAN RCALL XACDINHHESO_K_I_D RETURN THT5: MOV NHAN_ENCODER,W0 MOV #1,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0, NHAN_ENCODER RCALL THONGSO_ENCODER RETURN THT6: MOV GIAN_D,W0 MOV #2000,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0,GIAN_D RCALL XACDINHHESO_HESOD RETURN THT7: MOV GIAN_I,W0 MOV #1000,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0,GIAN_I RCALL XACDINHHESO_HESOI RETURN THT8: MOV LUUGOCZEZO,W0 MOV #320,W1 CPSLT W0,W1 ; SKIP IF < RETURN MOV W0,NHAP1 RCALL HAMTANG MOV NHAP1,W0 MOV W0,LUUGOCZEZO RETURN ;********************************** SULIDATA_MOD: BTSC BIENPHIM,#NUT4 RETURN BSET BIENPHIM,#NUT4 MOV BIENHIENTHI,W0 MOV #1,W1 CPSGT W0,W1 ; SKIP IF > BRA MODDANGCHAY COM BIENHAM_DATA MOV #1,W0 AND BIENHAM_DATA RETURN MODDANGCHAY: COM BIENMOD MOV #1,W0 AND BIENMOD MOV BIENMOD,W0 MOV W0,BIENHIENTHI RCALL GHI_EEPROM_BIENMOD RETURN ;*********************************************** HAMGIAM: dec THOIGIANPHIM1 bra NZ,CHUAGIAM MOV #100,W0 MOV W0,THOIGIANPHIM1 dec THOIGIANPHIM2 bra NZ,CHUAGIAM MOV LUUTHOIGIAN,W0 MOV W0,THOIGIANPHIM2 DEC NHAP1 dec THOIGIANPHIM3 bra NZ,CHUAGIAM MOV #5,W0 MOV W0,THOIGIANPHIM3 dec2 LUUTHOIGIAN bra NZ,CHUAGIAM MOV #2,W0 MOV W0,LUUTHOIGIAN RETURN CHUAGIAM: RETURN ;************** ;----------------- HAMTANG: dec THOIGIANPHIM1 bra NZ,CHUATANG MOV #100,W0 MOV W0,THOIGIANPHIM1 dec THOIGIANPHIM2 bra NZ,CHUATANG MOV LUUTHOIGIAN,W0 MOV W0,THOIGIANPHIM2 INC NHAP1 dec THOIGIANPHIM3 bra NZ,CHUATANG MOV #5,W0 MOV W0,THOIGIANPHIM3 dec2 LUUTHOIGIAN bra NZ,CHUATANG MOV #2,W0 MOV W0,LUUTHOIGIAN RETURN CHUATANG: RETURN ;---------------------- ;************************************************* * GHI_EEPROM: MOV #0x4045,W0 ; KHOI =4045/44 MOV W0,NVMCON MOV #0XFe00,W0 ; Init pointer MOV #0X007F,W1 MOV W1,NVMADRU MOV W0,NVMADR ;Start erase cycle by setting WR after writing key sequence DISI #5 ; Block all interrupts MOV #0x55,W0 ; MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 ; MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate erase sequence NOP NOP DAYL2: BTSC NVMCON,#WR BRA DAYL2 MOV #0XFe00,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV BIENMAU,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL3: BTSC NVMCON,#WR BRA DAYL3 MOV #0XFe02,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV BIENTU,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL4: BTSC NVMCON,#WR BRA DAYL4 MOV #0XFe04,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV GIAN,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL5: BTSC NVMCON,#WR BRA DAYL5 MOV #0XFe06,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV NHAN_ENCODER,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL6: BTSC NVMCON,#WR BRA DAYL6 MOV #0XFe08,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV BIENMOD,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL3DD: BTSC NVMCON,#WR BRA DAYL3DD MOV #0XFe0A,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV GIAN_D,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL7: BTSC NVMCON,#WR BRA DAYL7 MOV #0XFe0C,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV GIAN_I,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL8: BTSC NVMCON,#WR BRA DAYL8 MOV #0XFe0E,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV LUUGOCZEZO,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL9: BTSC NVMCON,#WR BRA DAYL9 RETURN ;************************************************ GHI_EEPROM_BIENMOD: MOV #0x4044,W0 ; KHOI =4045/44 MOV W0,NVMCON MOV #0XFe08,W0 ; Init pointer MOV #0X007F,W1 MOV W1,NVMADRU MOV W0,NVMADR ;Start erase cycle by setting WR after writing key sequence DISI #5 ; Block all interrupts MOV #0x55,W0 ; MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 ; MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate erase sequence NOP NOP DAYLD: BTSC NVMCON,#WR BRA DAYLD MOV #0XFe08,W0 ; Init pointer MOV #0X7F,W1 MOV W1,TBLPAG MOV BIENMOD,W2 ; Get 1st data TBLWTL W2,[ W0] MOV #0x4004,W0 ; KHOI =400A/4004 MOV W0,NVMCON DISI #5 ; Block all interrupts with priority <7 MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP DAYL3D: BTSC NVMCON,#WR BRA DAYL3D RETURN ;================================================= DOC_EEPROM: MOV #0Xfe00,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2,BIENMAU MOV #0Xfe02,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2,BIENTU MOV #0Xfe04,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2, GIAN MOV #0Xfe06,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2, NHAN_ENCODER MOV #0Xfe08,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2,BIENMOD MOV #0Xfe0A,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2,GIAN_D MOV #0Xfe0C,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2,GIAN_I MOV #0Xfe0E,W0 ; Init pointer MOV #0X007F,W1 MOV W1,TBLPAG TBLRDL [W0], W2 ; read data EEPROM MOV W2,LUUGOCZEZO MOV GIAN_D,W0 MOV #0,W1 CPSNE W0,W1 ; PHAI #0 INC GIAN_D MOV #100,W2 MOV BIENMAU,W0 MOV #0,W1 CPSNE W0,W1 ; PHAI #0 MOV W2,BIENMAU RETURN ;================================================= === DATMAUTOCDO: MOV #9162,W0 MUL GIAN_I MOV w3, PR3 ; with the value 0xFFFF MOV w2, PR2 ; Load the Period Register2 with value 0xFFFF CLR TMR1 CLR TMR3HLD CLR TMR2 MOV #6000,W5 MOV GIAN_D,W4 repeat #17 DIV.U W5,W4 ;W5/W4=W0; REM=W1 MOV W0,HESOTHOIGIAN RETURN ;************************************************* * DELAY: MOV #500,W0 MOV W0,SODEM LOPDL: DEC SODEM bra NZ, LOPDL RETURN KHOITAOLCD: RCALL DELAY BCLR LATB,#8 BCLR LATB,#7 MOV #0B0011,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RCALL DELAY BSET LATB,#8 BCLR LATB,#8 RCALL DELAY BSET LATB,#8 BCLR LATB,#8 RCALL DELAY MOV #0B0010,W0 MOV W0,LATD ;SET 4BIT BSET LATB,#8 BCLR LATB,#8 RCALL DELAY MOV #0B0000,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 MOV #0B1100,W0 ;display MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RCALL DELAY MOV #0B0000,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 MOV #0B0011,W0 ;shile mod display MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RCALL DELAY MOV #0B0000,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 MOV #0B0001,W0 ;CLR MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RCALL DELAY MOV #0B0000,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 MOV #0B0010,W0 ; GO HOME MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RCALL DELAY BSET LATB,#7 CLR W3 MOV W3,NHAP1 NAPCHU: MOV NHAP1,W3 mov #tblpage(SineTable1),W0 mov W0,TBLPAG mov #tbloffset(SineTable1),W0 ADD W0,W3,W1 TBLRDL [W1],W0 ; HE SO SINS NAM TRONG W0 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 REPEAT #2000 NOP INC2 NHAP1 MOV NHAP1,W0 MOV #160,W2 CPSEQ W0,W2 BRA NAPCHU RCALL DELAY BCLR LATB,#7 MOV #0B1000,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 MOV #0B1010,W0 ;ad ram MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RCALL DELAY RETURN BSET LATB,#7 MOV #'7',W0 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 REPEAT #1000 NOP BSET LATB,#7 MOV #'6',W0 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 REPEAT #1000 NOP BSET LATB,#7 MOV #'5',W0 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 REPEAT #1000 NOP RETURN ;888888888888888888888888888888888888888888888888 HIENTHILCD: MOV TROLCD1,W0 MOV #1,W1 CPSEQ W0,W1 ; SKIP IF = BRA SETRAM INC2 TROLCD1 BSET LATB,#7 MOV TROLCD,W0 MOV #0,W1 CPSNE W0,W1 MOV BCDT1,W2 MOV #2,W1 CPSNE W0,W1 MOV BCDT2,W2 MOV #4,W1 CPSNE W0,W1 MOV BCDT3,W2 MOV #6,W1 CPSNE W0,W1 MOV BCDT4,W2 MOV #8,W1 CPSNE W0,W1 MOV BCDT5,W2 MOV #10,W1 CPSNE W0,W1 MOV BCDV1,W2 MOV #12,W1 CPSNE W0,W1 MOV BCDV2,W2 MOV #14,W1 CPSNE W0,W1 MOV BCDV3,W2 MOV #16,W1 CPSNE W0,W1 MOV BCDV4,W2 MOV #18,W1 CPSNE W0,W1 MOV BCDV5,W2 MOV #20,W1 CPSNE W0,W1 MOV BCDD1,W2 MOV #22,W1 CPSNE W0,W1 MOV BCDD2,W2 MOV #24,W1 CPSNE W0,W1 MOV BCDD3,W2 MOV #26,W1 CPSNE W0,W1 MOV BCDD4,W2 MOV #28,W1 CPSNE W0,W1 MOV BCDD5,W2 MOV #30,W1 CPSNE W0,W1 MOV BCDA1,W2 MOV #32,W1 CPSNE W0,W1 MOV BCDA2,W2 MOV #34,W1 CPSNE W0,W1 MOV BCDA3,W2 MOV #36,W1 CPSNE W0,W1 MOV BCDA4,W2 MOV #38,W1 CPSNE W0,W1 MOV BCDA5,W2 MOV #2,W0 MOV W0,NHAP1 MOV W2,W0 MUL NHAP1 ;=W3W2 MOV W2,W3 mov #tblpage(SineTable3),W0 mov W0,TBLPAG mov #tbloffset(SineTable3),W0 ADD W0,W3,W1 TBLRDL [W1],W0 ; HE SO SINS NAM TRONG W0 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RETURN SETRAM: MOV #1,W0 MOV W0,TROLCD1 BCLR LATB,#7 INC2 TROLCD MOV TROLCD,W0 MOV #39,W2 CPSLT W0,W2 ; SKIP IF < BRA XOATROLCD KOTROLCD: MOV TROLCD,W3 mov #tblpage(SineTable4),W0 mov W0,TBLPAG mov #tbloffset(SineTable4),W0 ADD W0,W3,W1 TBLRDL [W1],W0 ; HE SO SINS NAM TRONG W0 BSET W0,#7 SWAP.B W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 SWAP.B W0 ;ad ram MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RETURN XOATROLCD: CLR W0 MOV W0,TROLCD MOV #0B1000,W0 MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 MOV #0B1010,W0 ;ad ram MOV W0,LATD BSET LATB,#8 BCLR LATB,#8 RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; HIENTHISO: ; DEC DEMLCD ; BRA NZ,main_loop ; MOV W0,DEMLCD MOV POSCNT,W5 RCALL HEXTOBCD MOV BCD1,W0 MOV W0,BCDT1 MOV BCD2,W0 MOV W0,BCDT2 MOV BCD3,W0 MOV W0,BCDT3 MOV BCD4,W0 MOV W0,BCDT4 MOV BCD5,W0 MOV W0,BCDT5 MOV VITRI_DATL,W5 RCALL HEXTOBCD MOV BCD1,W0 MOV W0,BCDV1 MOV BCD2,W0 MOV W0,BCDV2 MOV BCD3,W0 MOV W0,BCDV3 MOV BCD4,W0 MOV W0,BCDV4 MOV BCD5,W0 MOV W0,BCDV5 ; MOV HIEUFW,W5 ; MOV POSCNT1,W5 ; MOV XUNGCHAY1,W5 MOV DPWM1,W5 RCALL HEXTOBCD MOV BCD1,W0 MOV W0,BCDD1 MOV BCD2,W0 MOV W0,BCDD2 MOV BCD3,W0 MOV W0,BCDD3 MOV BCD4,W0 MOV W0,BCDD4 MOV BCD5,W0 MOV W0,BCDD5 ; MOV HIEURW,W5 ; MOV POSCNT0,W5 MOV DPWM2,W5 RCALL HEXTOBCD MOV BCD1,W0 MOV W0,BCDA1 MOV BCD2,W0 MOV W0,BCDA2 MOV BCD3,W0 MOV W0,BCDA3 MOV BCD4,W0 MOV W0,BCDA4 MOV BCD5,W0 MOV W0,BCDA5 RCALL HIENTHILCD RETURN ;99999999999999999999999999999999999999999999999 HEXTOBCD: MOV W0,W5 ; IN W5 MOV #10000,W4 repeat #17 DIV.U W5,W4 ;W5/W4=W0; REM=W1 MOV W0,BCD1 MOV W1,W5 MOV #1000,W4 repeat #17 DIV.U W5,W4 ;W5/W4=W0; REM=W1 MOV W0,BCD2 MOV W1,W5 MOV #100,W4 repeat #17 DIV.U W5,W4 ;W5/W4=W0; REM=W1 MOV W0,BCD3 MOV W1,W5 MOV #10,W4 repeat #17 DIV.U W5,W4 ;W5/W4=W0; REM=W1 MOV W0,BCD4 MOV W1,BCD5 RETURN ;------------------------------------------------ ;DELAY: ; MOV #1000,W0 ;100 ; MOV W0,NHAP3 ; ;LOPDL: ; REPEAT #1000; ; NOP ; DEC NHAP3 ; BRA NZ,LOPDL ;RETURN ;************************************************* *************************** KHOIDONGDIVERSERVO: MOV #900,W0 ;700 MOV W0,OUTPWMMAX MOV #0,W0 ;700 MOV W0,OUTPWM MOV #30,W0 ;50 MOV W0,GIATRIOFSET MOV #900,W0 ; TRU 20% DE NAP TU NGUON KICH ;1300 MOV GIATRIOFSET,W1 SUB W0,W1,W1 MOV W1,GIUPTR MOV #TUSO,W0 MOV W0,BIENTU MOV #MAUSO,W0 MOV W0,BIENMAU MOV #0,W0 MOV W0,VITRI_DATHCL MOV W0,VITRI_CNTL MOV W0,VITRI_DATL MOV W0,VITRI_EL MOV #0X7FFF,W0 MOV W0,VITRI_DATHCH MOV W0,VITRI_CNTH MOV W0,VITRI_DATH MOV W0,VITRI_EH MOV #0,W0 MOV W0,TIMER1_OLD MOV W0,TIMER2_OLD MOV W0,BIEN_AMDUONG MOV W0,SAISO MOV W0,SAISO_CU MOV W0,KETQUA_P MOV W0,KETQUA_I MOV W0,KETQUA_D MOV W0,KETQUA_DH CLR TMR2 CLR TMR1 MOV #35,W0 ; 8 MOV W0,HESO_P MOV #0,W0 ;50 MOV W0,HESO_I MOV #1,W0 ;1 MOV W0,HESO_D MOV #500,W0 ;500 MOV W0,HESO_DP MOV #65000,W0 MOV W0,THOIGIAN1 MOV #65000,W0 MOV W0,THOIGIAN2 MOV #10000,W0 MOV W0,THOIGIAN3 MOV #10,W0 MOV W0,THOIGIAN4 BSET BIEN_AMDUONG,#10 MOV #1000,W0 MOV W0,THOIGIANBAOVE MOV #1000,W0 MOV W0,THOIGIANBAOVEDONG ;================================================= ======= MOV #50,W0 MOV W0,THOIGIANLED MOV #5289,W0 RCALL TINHCHUNG MOV #1,W0 MOV W0,SODEMLED MOV #7,W0 MOV W0,THOIGIANPHIM1 MOV #15,W0 MOV W0,THOIGIANPHIM2 MOV #5,W0 MOV W0,THOIGIANPHIM3 MOV #10,W0 MOV W0,LUUTHOIGIAN MOV #0,W0 MOV W0,BIENHIENTHI MOV W0,BIENMOD MOV W0,GOCNGHIENGTHUC MOV W0,BIENPHIM MOV W0,BIENHAM_DATA MOV W0,GOCAMDUONG CALL DOC_EEPROM RCALL HIEUCHINH_EEROM RCALL XACDINHHESO_K_I_D RCALL XACDINHHESO_HESOD RCALL XACDINHHESO_HESOI RETURN ;************************************************* ************************************************** ****************************** ;----------------------------------------------------------------------------- ;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 T1CON ; Stops the Timer1 and reset control reg. CLR TMR1 ; Clear contents of the timer register MOV #0XFFFF, w0 ; Load the Period register MOV w0, PR1 ; with the value 0x8CFF ;BSET IPC0, #T1IP0 ; Setup Timer1 interrupt for ;BCLR IPC0, #T1IP1 ; desired priority level ;BCLR IPC0, #T1IP2 ; (this example assigns level 1 priority) ;BCLR IFS0, #T1IF ; Clear the Timer1 interrupt status flag ;BSET IEC0, #T1IE ; Enable Timer1 interrupts MOV #0x8016, W0 ; Start Timer1 with prescaler settings at ; 1:8 and clock source set to the external MOV w0, T1CON ; clock in the synchronous mode ; Example code for Timer1 ISR BCLR T1CON, #TCKPS0 BCLR T1CON, #TCKPS1 RETURN return Init_TMR2: CLR T2CON ; Stops the Timer1 and reset control reg. CLR TMR2 ; Clear contents of the timer register MOV #0XFFFF,W0;Load the Period register MOV w0, PR2 ; with the value 0x8CFF ;BSET IPC0, #T1IP0 ; Setup Timer1 interrupt for ;BCLR IPC0, #T1IP1 ; desired priority level ;BCLR IPC0, #T1IP2 ; (this example assigns level 1 priority) ;BCLR IFS0, #T1IF ; Clear the Timer1 interrupt status flag ;BSET IEC0, #T1IE ; Enable Timer1 interrupts MOV #0x8016, W0 ; Start Timer1 with prescaler settings at ; 1:1 and clock source set to the external MOV w0, T2CON ; clock in the synchronous mode ; Example code for Timer1 ISR BCLR T2CON, #TCKPS0 BCLR T2CON, #TCKPS1 RETURN TIMER32BIT: CLR T2CON ; Stops any 16/32-bit Timer2 operation CLR T3CON ; Stops any 16-bit Timer3 operation CLR TMR3 ; Clear contents of the Timer3 timer register CLR TMR2 ; Clear contents of the Timer2 timer register MOV #0xF, w0 ; Load the Period Register 3 MOV w0, PR3 ; with the value 0xFFFF MOV #0X4240,W0 MOV w0, PR2 ; Load the Period Register2 with value 0xFFFF BSET IPC1, #T3IP0 ; Setup Timer3 interrupt for BCLR IPC1, #T3IP1 ; desired priority level BCLR IPC1, #T3IP2 ; (this example assigns level 1 priority) BCLR IFS0, #T3IF ; Clear the Timer3 interrupt status flag BSET IEC0, #T3IE ; Enable Timer3 interrupts BSET T2CON, #T32 ; Enable 32-bit Timer operation BSET T2CON, #TON ; Start 32-bit timer with prescaler BSET T2CON, #TCKPS0 ; ; settings at 1:1 and clock source set to ; the internal instruction cycle RETURN ;------------------------------------------------------------------------------ ;Chuong trinh con khoi tao cac cong I/O, de noi voi LED ;------------------------------------------------------------------------------ Init_PORTE: mov #0b1111110011111111,W0 ;LED noi vao cong E (RE0 .. RE5) mov W0, HUONGE MOV W0,DATAE return ;------------------------------------------------------------------------------ Init_PORTG: mov #0b1111111111110000,W0 ;LED noi vao cong E (RE0 .. RE5) mov W0, HUONGG MOV W0,DATAG return ;--------------------------------------------------------------------------------- ;Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin ;hieu dieu chinh cua bien tro tai AN0 ;------------------------------------------------------------------------------- Init_PORTb: mov #0B0000111111111111, W0 ;Chan RB0 la ngo vao analog AN0, cac chan khac la mov W0, HUONGB ;ngo ra return Init_PORTC: mov #0XFFFF, W0 ;Chan RCla ngo vao analog mov W0, HUONGC ;ngo ra return ;--------------------------------------------------- Init_PORTD: mov #0X0F00, W0 mov W0, HUONGD ;ngo ra MOV W0,DATAD return Init_PORTF: mov #0XFF00, W0 mov W0, HUONGF ;ngo ra MOV W0,DATAF return ;------------------------------------------------------------------- init_adc: mov #0XFFFE, W0 ;Cac chan khac la digital, chan AN0 la analog mov W0, ADPCFG mov #0x00E0, W0 ;Module ADC cham dut lay mau va kich hoat chuyen doi mov W0, ADCON1 clr ADCON2 clr ADCHS ;Kenh 0 doc tin hieu giua AN0 va AVss clr ADCSSL ;Khong quet cac ngo vao mov #0x01F1F, W0 ;Dung 31 TAD cho lay mau, xung clock cua he thong, mov W0, ADCON3 ;TAD = 2xTCY = 250 ns ; bclr IFS0, #ADIF ;Xoa co ngat ADC ; BCLR IFS0,#ADIF ; bset IEC0, #ADIE ;Cho phep ngat ADC bset ADCON1, #ASAM ;Khoi dong che do tu dong lay mau bset ADCON1, #ADON ;Bat module ADC BSET ADCON1,#SAMP return ;------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------- init_pwm_motor: CLR PTCON BSET PTCON,#PTMOD1 ; MOV #0b11111111,W0 MOV W0,PWMCON1 BCLR PWMCON1,#PEN3L ; NGO VAO CHAN PWM3H CLR PWMCON2 BSET PWMCON2,#IUE ; ENABALE LOAD PDC1,2,3 NEW BSET PWMCON2,#OSYNC ; Bclr PWMCON2,#UDIS ; = 1 PTPER NOT UPDATA ;393 ; TAN SO 20KHz =600 MOV #500,W0 ;700 MOV W0,PTPER CLR FLTACON MOV #0b0011111100000000,W0 MOV W0,OVDCON CLR OVDCON MOV #0,W0 ; 245 MOV W0,DPWM1 MOV W0,DPWM2 MOV W0,DPWM3 MOV #0B1111110000111111,W0 ;stop MOV W0,DTCON1 MOV #0b0011111100000000,W0 ;run MOV W0,OVDCON BSET PTCON,#PTEN return ;9999999999999999999999999999999999999999999999999 999999 UNIt_QEI: MOV #0,W0 MOV W0,QEICON BSET QEICON,#QEIM2 BSET QEICON,#QEIM1 ; X2 BSET QEICON,#QEIM0 BSET QEICON,#SWPAB MOV #0XFFFF,W0 MOV W0,MAXCNT RETURN ;************************************************* ***** THONGSO_ENCODER: BTSS NHAN_ENCODER,#0 BCLR QEICON,#QEIM1 ; X2 BTSC NHAN_ENCODER,#0 BSET QEICON,#QEIM1 ; X2 RETURN ;9999999999999999999999999999999999999999999999999 HIEUCHINH_EEROM: MOV #10,W2 MOV BIENTU,W0 MOV #10000,W1 SUB W1,W0,W3 ;< BRA C,BT MOV W2,BIENTU BT: MOV #10,W2 MOV BIENMAU,W0 MOV #10000,W1 SUB W1,W0,W3 ;< BRA C,BM MOV W2,BIENMAU BM: MOV #1100,W2 MOV GIAN,W0 MOV #10000,W1 SUB W1,W0,W3 ;< BRA C,BG MOV W2,GIAN BG: MOV #1,W2 MOV NHAN_ENCODER,W0 MOV #10000,W1 SUB W1,W0,W3 ;< BRA C,BN MOV W2,NHAN_ENCODER BN: MOV #1000,W2 MOV GIAN_D,W0 MOV #10000,W1 SUB W1,W0,W3 ;< BRA C,BD MOV W2,GIAN_D BD: MOV #50,W2 MOV GIAN_I,W0 MOV #2000,W1 SUB W1,W0,W3 ;< BRA C,BI MOV W2,GIAN_I BI: RETURN .END |
20-03-2009, 12:01 PM | #5 |
Đệ tử 6 túi
Tham gia ngày: Apr 2006
Bài gửi: 125
: |
theo mình bạn sửa dòng này config __FGS, CODE_PROT_ON thành config __FGS, CODE_PROT_OFF
|
20-03-2009, 06:38 PM | #6 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
|
20-03-2009, 05:52 PM | #7 | |
Trưởng lão PIC bang
|
Trích:
Bạn cho biết bạn đang dùng mạch nạp gì? Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
20-03-2009, 06:35 PM | #8 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
chào anh
em đang dùng mach nạp icd2. em đã mang cả mạch sang bên nhà sản xuất họ nap bằng vài mạch nạp khác hiện tương cũng như vậy, không khá gì hơn >>HIỆN tượng cũng chết thêm một con nữa . bây giờ em phải nghỉ ngơi suy nghĩ để lấy lại tinh thần vì chết gần 10 chú rồi, mà không phải chết nó vẫn nhận được chíp nhưng không ghi không sóa được nữa. các bác có ý kiến gì xin giúp. sáng nay có bác chỉ hàn 12v vào chân reset rồi xóa >> chết luôn không còn nhận được chip nữa.
|
20-03-2009, 07:45 PM | #9 | |
Trưởng lão PIC bang
|
Trích:
Bạn xem lại nguồn gốc của lô hàng đã mua. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
23-03-2009, 02:27 PM | #10 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
QUOTE=mtuankct;23766]theo mình bạn sửa dòng này config __FGS, CODE_PROT_ON thành config __FGS, CODE_PROT_OFF[/QUOTE]
CẢNH BÁO; ĐÚNG LÁ NÓ BỊ LỖI Ở ĐÂY ,AI MÀ SỬ DỤNG DSPIC30F6010A HÃY CẨN THẬN KHÔNG ĐỂ DÒNG NÀY LÊN " ON' HOẶC XOÁ CẢ DÒNG NÀY MÀ BẮT BUỘC PHẢI ĐỂ OFF VÌ NÓ MẶC ĐỊNH LÀ ON. KHI NẠP CHIP CHỊ SỬ DỤNG ĐỰOC MỘT LẦN. NHƯNG CÁC BÁC ƠI KHÔNG LẼ CHĨ KHI NÀO ỨNG DỤNG XONG HOÀN CHỈNH MỚI ĐUƠC KHOÁ CHIP. ĐÔI KHI CẦN SỬA ĐỔI THAY CHO ỨNG DỤNG KHÁC THÌ PHẢI THAY CHIP AH. RẤT MONG CÁC CAO THỦ NGHIÊN CỨU VỤ NÀY |
23-03-2009, 03:28 PM | #11 | |
Trưởng lão PIC bang
|
Trích:
Tôi đã xem lại các errata sheet của dsPIC30F6010A, và tìm trên diễn đàn của Microchip. Chỉ có một trường hợp giống như của bạn là bật bảo vệ code rồi không nạp lại được, nhưng người đó quên xóa chip trước khi nạp. Tôi nhận thấy bạn đã thao tác xóa chip trước khi nạp, nhưng lấy gì để bảo đảm thao tác xóa chip là thành công. Do đó, tôi vẫn cho rằng mạch nạp ICD 2 của bạn có vấn đề. Nếu mạch nạp mà bạn mua không phải là ICD 2 chính hãng, bạn nên nhờ một đơn vị nào đó có ICD 2 chính hãng kiểm tra lại giúp (R&P chẳng hạn) xem có xóa được những chip mà bạn cho là đã chết đó hay không. Nếu bạn đang học, việc quan trọng hơn là hoàn thành đồ án, luận văn. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
24-03-2009, 09:59 AM | #12 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 20
: |
vâng đúng là mạch nạp của em không phải hàng chính hãng
nhưng có ai biết địa chỉ cụ thể bán hàng chính hãng ở đâu không , nhưng phải đảm bảo xoá được con này em muốn mua một cái xem có cứu được những con chip đáng thương của em, và em cũng muốn nạp khi khoá là phải xoá được. rất mong sự giúp đỡ của các bác
* VÀ NẾU ĐÚNG NHƯ VÂY>> nhân thể đây em CŨNG mong nhà sản xuất mạch nạp mà đã cung cấp cho em nếu có đọc luồng này thì cố gắng hoản thành lỗi này , vì tất cả các loại mạch nạp bên anh đều bị như vậy . EM KHÔNG MUỐN NÊU TÊN NHÀ CUNG CẤP VÌ SỢ ẢNH HƯỞNG ĐẾN VẤN ĐỀ KINH DOANH CỦA HỌ MONG MỌI NGƯỜI THÔNG CẢM. HƠN BAO GIỜ HÊT EM MONG SẼ CÓ MỘT SỰ HỖ TRỢ VÌ EM CÒN 12 EM DSPIC30F6010A CHỜ ĐƯƠC CỨU SÔNG .+ HIỆN TẠI KHÔNG CÒN CÁCH NẢO KHÁC LÀ PHẢI CHỜ CHƯƠNG TRÌNH HOÀN CHỈNH MỚI DÁM LOCK CHIP >> CHÁN ƠI LÀ CHÁN " TỐN TIẾN TỐN THỜI GIAN VÌ LÍ DO VỚ VẨN |
24-03-2009, 11:52 AM | #13 |
Đệ tử 3 túi
Tham gia ngày: Jul 2005
Bài gửi: 47
: |
Hiện tượng này không phải là cá biệt đâu ạ, có một khách hàng của PNLab cũng gặp phải hiện tượng như thế với dsPIC30F4011, nạp vào 1 lần là không thể xóa được nữa, chíp mua tại PNLab, họ dùng PICKIT2 của TME, đã thử cả PICKIT2-SE và GTP của PNLab cũng không khắc phục được tình hình.
__________________
PNLab Technologies Chuyên cung cấp mạch nạp, KIT cho ARM, PIC, AVR, 8051... Các loại IC, vi điều khiển, phụ kiện điện tử... www.pnlabvn.com - business@pnlabvn.com 0983.550.991 - 0989.537.500 - 04.6285.2980 PICKIT2 Programmer!!! |
24-03-2009, 09:57 PM | #14 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
24-03-2009, 10:58 PM | #15 |
Đệ tử 4 túi
Tham gia ngày: May 2008
Nơi Cư Ngụ: TpHCM
Bài gửi: 79
: |
Nếu bạn ở TPHCM có thể đến Cty Thiên Minh để chúng tôi giúp đỡ, nhớ mang theo mạch nạp và chip của bạn. Bạn nên hẹn trước số: 0903.639 768 vì tôi ít khi có mặt tại Cty.
Có thể tin rằng bạn không dùng hàng của TMe, vì nếu có thì chúng tôi đã nhận được thông tin của bạn rồi. mặt khác chúng tôi hỗ trợ kỹ thuật rất tốt nhưng lại không có thông tin phản ánh nào của bạn. PICKit 2 đã SX và bán ra thị trường hơn 1 năm, rất nhiều người dùng nhưng chưa có thông tin sự cố nào đáng kể, vì vậy có thể khẳng định SP này rất đáng tin cậy. ICD2 loại cũ đã ngưng bán khá lâu có đôi chút rắc rối là thỉnh thoảng mất Firmware của 18F4550 nhưng hoạt động rất tốt, ICD2 phiên bản mới đã khắc phục hiện tượng này, hoạt động rất trơn tru. Đã bán khoảng vài chục, nhưng cũng chưa có thông tin sự cố. Chip của bạn nguồn gốc thế nào? bạn thử mua chỗ khác xem sao. Chúc thành công
__________________
www.tme.vn 226 Tân Phước F6 Q10 TPHCM - ĐT:08.39573224 Trang web bán hàng online các loại phần cứng và linh kiện điện tử, phong phú và chuyên nghiệp |
|
|