Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi!
Cititi regulament postare forum inainte de a posta!
|
Lista Forumurilor Pe Tematici
|
Mihai Sprinceana | Inregistrare | Login
POZE MIHAI SPRINCEANA
Nu sunteti logat.
|
Nou pe simpatie: alexxandra
 | Femeie 24 ani Timis cauta Barbat 26 - 59 ani |
|
mihaispr
Administrator
 Inregistrat: acum 18 ani
Postari: 2142
|
|
;Trasnsmisia I2C(cum transmit datele pe I2C-datele sunt transmise in 8biti, ultimul bit numit Acknowledge ; 1 instructiune poate dura 1,085ms ;SDA- Serial Data ;SCL- Serial Clock $mod51
;========================================================================================== ; Tabela de salt rutine Monitor ;==========================================================================================
Kern_Table Equ 50h
; Rutine UART UART_Init Equ Kern_Table GetChar Equ Kern_Table+3 PutChar Equ Kern_Table+6 PutByte Equ Kern_Table+9 PutDec Equ Kern_Table+12 PutBin Equ Kern_Table+15 PutCRLF Equ Kern_Table+18 PutSpace Equ Kern_Table+21 PutDPTR Equ Kern_Table+24 PutMsg Equ Kern_Table+27
; Rutine conversie Hex2Asc Equ Kern_Table+30 Asc2Hex Equ Kern_Table+33
; Rutine temporizare Delay_ms Equ Kern_Table+36 Delay_sec Equ Kern_Table+39
; Rutine I2C I2C_Init Equ Kern_Table+42 Send_SLAW Equ Kern_Table+45 Test_I2C_Device Equ Kern_Table+48 I2CReadByte Equ Kern_Table+51 I2CWriteByte Equ Kern_Table+54 I2CStart Equ Kern_Table+57 I2CStop Equ Kern_Table+60 Get_ACK Equ Kern_Table+63 Send_ACK Equ Kern_Table+66 Send_NAK Equ Kern_Table+69 I2CShiftOut Equ Kern_Table+72 I2CShiftIn Equ Kern_Table+75
; Rutine SPI SPI_Init Equ Kern_Table+78 SPIShiftOut Equ Kern_Table+81 SPIShiftIn Equ Kern_Table+84
; Rutine Monitor Mon_L Equ Kern_Table+87 GetCmd Equ Kern_Table+90 ProcL Equ Kern_Table+93 ProcRec Equ Kern_Table+96 Dump_Code Equ Kern_Table+99 Dump_IRAM Equ Kern_Table+102 Fill Equ Kern_Table+105 MoveBlock Equ Kern_Table+108 Compare_Mem Equ Kern_Table+111 HexGen Equ Kern_Table+114
SDA bit P1.6 SCL bit P1.7 contor DATA 00h
org 8000h ; jmp main
main: mov P1,#11000000b call i2c_start ; mov A,#10011100b mov A,#01000000b
call i2c_send call i2c_stop jmp Mon_L
i2c_start:
setb SCL ; setam SCl pe 1 call delay5us ; se apeleaza intarzierea pt respectarea tSTA din SCL clr SDA ; se trece linia de date in 0 call delay5us ;pt respectarea tSTA din SDA clr SCl call delay5us ret
delay5us: NOP;ocupa 1 ciclu=1us ret
i2c_stop: setb SCL call delay5us setb SDA ret
i2c_send: mov contor,#08h loop_send: RLC A mov SDA,C; nu se intarzie pt ca tSU;DAT=250ns setb SCl; s-a setat ceasul call delay5us clr SCl NOP NOP DJNZ contor,loop_send; se decrementeaza contorul si se sare la loop_send setb SDA nop setb SCL mov C,SDA mov P1.0,C clr SDA call delay5us clr SCL ret i2c_receive: mov contor,#08h; primire 8 biti date loop_receive:
setb SCL ;setare ceas in 1 mov C,SDA ;stocare in carry ceea ce este in SDA(Serial Data) rlc A ;rotire acumulator(biti transmisi secvential) nop ;delay 1microsecunda nop ;delay 2microsecunde clr SCL ;setare ceas in 0(SCL-Serial Clock) call delay5ms ;intarziere de 5microsecunde djnz contor,loop_rec clr SDA ;setare linii date in 0 setb SCL ;setare ceas in 1 call delay5ms clr SCL ;nemodificare date pt.ceas in 1 si setam deci in 0 linia de ceas setb SDA ;pt.primire din nou a datelor ret end
|
|
| pus acum 17 ani |
|