![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 | |
Trưởng lão PIC bang
|
Trích:
Thanh ghi LAT dùng để xuất dữ liệu ra port, còn thanh ghi PORT dùng để đọc dữ liệu từ port. Thanh ghi LAT xuất hiện trong PIC18 để giải quyết vấn đề hiệu ứng read-modify-write xuất hiện trong các dòng PIC base-line và mid-range (PIC12, PIC16). 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 thay đổi nội dung bởi: namqn, 15-03-2008 lúc 08:48 AM. |
|
![]() |
![]() |
![]() |
#2 | |
Nhập môn đệ tử
Tham gia ngày: Feb 2008
Bài gửi: 5
: |
Trích:
Nhu ban namqn da noi tren thi that dung, toi bo xung them: Ban co the sai cac port.PIN thanh Input hay Output tuy-y (fai chieu theo data sheet). Vi du ban dang sai RA.1 thanh Input ma ban muon doi no thanh output thi cu viec set cai TRISA.1 thanh LOW (tuc la = 0 cho out put). Doi khi ban muon sai nhu vay neu ban viet I2C software; ban doi DATA pin thanh IN de doc va thanh OUT de viet vao I2C. Nhung neu ban da gan pin nao do vao LED vi-du, thi READ cung khong co ich gi. Hy-vong that help, LB ;/////////////////// --- THI DU ---///////////////////// --- in MCC18 --- /-------------------------------------------- I2CBITOUT routine viet mot byte sang I2C //------------------------------------------- void I2CBITOUT(byte n) { I2CDataTris=0; // CHU-Y: cho pin nay thanh OUTPUT if(n) // m_I2CDataBit=1; // doi logic else m_I2CDataBit=0; Nop(); Nop(); m_I2CClkBit=1; // set clock line high I2CDelay(); m_I2CClkBit=0; // return clock line low I2CDelay(); } //------------------------------------------ I2CBITIN routine doc mot byte tu I2C //------------------------------------------ byte I2CBITIN(void) { byte i; I2CDataTris=1; // bien data line thanh INPUT de doc byte I2CDelay(); m_I2CClkBit=1; // set clock line high I2CDelay(); // cho chut siu i = m_I2CDataBit ? 1 : 0; // read the data bit m_I2CClkBit=0; // set clock line low return i; } ;////////////////////// --- thi du in ASM --- ////////////////////// ; ;------------------------------- ;/////////////////////////////// ; BITOUT sub for ext EEprom ;-------- ; BITOUT bcf LATA,0 ; -- doi lai 06/25/05 -- bcf TRISA,0 ; cho Sdata Output btfss Temp4,do ; bitFLAG,do ; check for state of data goto bitlow ; if low then bsf Sdata ; output a ---- HI BIT ---- goto clkout ; go toggle the clock bitlow bcf Sdata ; else output a ---- LOW BIT ---- clkout bsf Sclk ; set clk line HI call delayEE0 ; ___/"""""\___ bcf Sclk ; set clk line low bcf Sdata ; 04/20/20 da chay tot nop retlw 0 ; ;------------------------------- ;/////////////////////////////// ; BITIN sub: Read one bit of data from ee and store it in di ;-------- for ext EEprom ------ ; BITIN bcf Sdata ; ok nop ; ok nop ; ok bsf LATA,0 ; DOI LATA TO B HAY C TUY THEO port -- bsf TRISA,0 ; cho Sdata INPUT bsf Sclk ; set clock line HI __/"" ;-- call delayEE001 ; OK btfsc Sdata ; jb Sdata,btin1 goto btin1 bcf Temp4,di ; bitFlag,di ; input bit was LOW goto btin2 btin1 bsf Temp4,di ; bitFlag,di btin2 bcf Sclk ; set clock line LOW too ""\__ nop ; ok retlw 0 ; -- khi ve thi di da co mot byte cua data -- ;------------------------------- ; Hy vong cai nay giup, LB |
|
![]() |
![]() |
![]() |
|
|