51单片机扩展24C02程序和电路.docx
- 文档编号:11881084
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:12
- 大小:15.85KB
51单片机扩展24C02程序和电路.docx
《51单片机扩展24C02程序和电路.docx》由会员分享,可在线阅读,更多相关《51单片机扩展24C02程序和电路.docx(12页珍藏版)》请在冰豆网上搜索。
51单片机扩展24C02程序和电路
A
SDpF C2 30 gR3 C3IDuFL^TBTF> A1SCK 越SOA U2*vP 74CQ4A : iDa> i» it U1 29 矿 3I rU.P/^LU PD.VAD1 P02Z«E XTALS PO.XfiCti P0.4/O4 PD.S//O5 FG.AMX RST PCLW07 F20/« PE哄 P2: 2/A10 PSEN P23/A11 ALE P1.4/A12 EA P2.5ZA13 P2WA14 F27/A15 P1.D P3.CunRXD F1.1 F3J/TXD P1.2 Pi.iflrnD PT-3 P3.3/1NT1 Pl-1 P34/ID Pl.5 P3.S/TI PT.e P3.&WR P17 P37JRD 41 27 3 ID 11 u 14 F 16 17 ATS9C51 SRCFiLM24O&4开机统计ASM #include #include #defineuintunsignedint #defineucharunsignedchar sbitsda=P1A1; sbitscl=P1A0; uchartemp=0; ucharstate; constuchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; voiddelayic(uinti) { ucharj; while(i--) { for(j=0;j<120;j++); } } voiddelaym(uchart) { uchari; for(i=0;i } voidStart_I2c() { sda=1; _nop_(); scl=1; _nop_(); _nop_(); _nop_(); sda=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=0; _nop_(); _nop_(); } voidStop_I2c() ( sda=0; _nop_(); scl=1; _nop_(); _nop_(); _nop_(); sda=1; _nop_(); _nop_(); _nop_(); _nop_(); } voidcack(void) ( sda=0; _nop_(); _nop_(); _nop_(); scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=0; } voidmnack(void) ( sda=1; _nop_(); _nop_(); _nop_(); scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=0; sda=0; _nop_(); _nop_(); } voidwrbyt(uchardate) j=0x80; for(i=0;i<8;i++) ( if((date&j)==0) ( sda=0; scl=1; delaym (1); scl=0; } else ( sda=1; scl=1; delaym (1); scl=0; sda=0; } j=j>>1; } } uchara,c; scl=0; delaym (1); sda=1; delaym (1); for(c=0;c<8;c++) ( scl=1; delaym (1); a=(a<<1)|sda; scl=0; delaym (1); } returna; } voidread_data() ( Start_I2c(); wrbyt(0xa0); cack(); cack(); Start_I2c(); wrbyt(0xa1); cack(); temp=rdbyt(); mnack(); Stop_I2c(); delayic(50); } voidwrite_data() { if(temp<=10) { state=temp; state++; Start_I2c(); wrbyt(0xa0); cack(); wrbyt (1); cack(); Stop_I2c(); delayic(50); else ( temp=0; state=temp; Start_I2c(); wrbyt(0xa0); cack(); wrbyt (1); cack(); wrbyt(state); cack(); Stop_I2c(); delayic(50); } } voiddispaly(ucharcount) ( ucharnum; num=count; if(num>=5) ( P2=0x00; delayic(400); } data_l=num%10; data_h=num/10; P2=0x01; P0=tab[data_h]; delayic(150); P2=0x02; P0=tab[data_l]; delayic(150); } voidmain() { read_data(); write_data(); while (1) { dispaly(temp); } } 汇编程序: ;24c02的开机计数器,系统复位一次数码管加1 SDA24EQUP1.1 SCLK24EQUP1.0 ORG0000H AJMPMAIN ORG0030H MAIN: CLRP3.7;打开写保护 MOVDPTR,#TAB MOVA,#00H;读地址 LCALLRD24 CJNEA,#10,TT TT: JNCTT1 AJMPTT2 TT1: MOVA,#00 TT2: MOV30H,A MOVCA,@A+DPTR SETBP2.0;开数码管 MOVP0,A;送显示 MOVA,30H INCA MOVA,#00H LCALLWT24 AJMP$ TAB: DB28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H RD24: PUSHACC;读24C02子程序。 SETBSDA24 CLRSCLK24 CALLSTART24 MOVA,#0A0H CALLSHIFT8 CALLACK POPACC CALLSHIFT8 CALLACK CALLSTART24 MOVA,#0A1H CALLSHIFT8 CALLACK SETBSDA24 MOVR7,#8 CLRA SETBSDA24 RD000: RLA SETBSCLK24 MOVC,SDA24 MOVACC.0,C CLRSCLK24 DJNZR7,RD000 RET ; ;写入24C02程序: WT24: PUSHACC SETBSDA24 CLRSCLK24 CALLSTART24 MOVA,#0A0H CALLSHIFT8 CALLACK POPACC CALLSHIFT8 CALLACK MOVA,B CALLSHIFT8 CALLACK CALLSTOP CALLDELAY2 RET ; ;开始条件 START24: CLRSDA24 SETBSDA24 SETBSCLK24 CLRSDA24 CLRSCLK24 RET ;停止条件 STOP: CLRSDA24 SETBSCLK24 SETBSDA24 RET ;应答信号 ACK: SETBSCLK24 CLRSCLK24 RET ;读、写数据 SHIFT8: MOVR7,#8 SH01: RLCA MOVSDA24,C SETBSCLK24 CLRSCLK24 DJNZR7,SH01 RET DELAY2: NOP NOP NOP NOP RET END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 扩展 24 C02 程序 电路