📄 24c02.lis
字号:
.module _24c02.c
.area data(ram, con, rel)
0000 _BitTab::
0000 .blkb 2
.area idata
0000 FEFD .byte 254,253
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 FBF7 .byte 251,247
.area data(ram, con, rel)
0004 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
0004 .dbsym e BitTab _BitTab A[4:4]c
0004 _DispTab::
0004 .blkb 2
.area idata
0004 3F06 .byte 63,6
.area data(ram, con, rel)
0006 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
0006 .blkb 2
.area idata
0006 5B4F .byte 91,'O
.area data(ram, con, rel)
0008 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
0008 .blkb 2
.area idata
0008 666D .byte 'f,'m
.area data(ram, con, rel)
000A .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
000A .blkb 2
.area idata
000A 7D07 .byte 125,7
.area data(ram, con, rel)
000C .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
000C .blkb 2
.area idata
000C 7F6F .byte 127,'o
.area data(ram, con, rel)
000E .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
000E .dbsym e DispTab _DispTab A[10:10]c
000E _DISP_DATA::
000E .blkb 2
.area idata
000E 0000 .byte 0,0
.area data(ram, con, rel)
0010 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
0010 .blkb 2
.area idata
0010 0000 .byte 0,0
.area data(ram, con, rel)
0012 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
0012 .dbsym e DISP_DATA _DISP_DATA A[4:4]c
.area text(rom, con, rel)
0000 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
0000 .dbfunc e Delay_us _Delay_us fV
0000 ; time -> R16,R17
.even
0000 _Delay_us::
0000 .dbline -1
0000 .dbline 84
0000 ; /****************************************Copyright (c)**************************************************
0000 ; ** ADEmbed Development Co.,LTD.
0000 ; ** http://www.adembed.com
0000 ; **--------------File Info-------------------------------------------------------------------------------
0000 ; ** File name: 24c02.c
0000 ; ** Last modified Date: 2008-12-13
0000 ; ** Last Version: 1.0
0000 ; ** Descriptions: 24c02 Test.
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; ** Created by: junbolu
0000 ; ** Created date: 2008-12-13
0000 ; ** Version: 1.0
0000 ; ** Descriptions:
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; ** Modified by:
0000 ; ** Modified date:
0000 ; ** Version:
0000 ; ** Descriptions:
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; **ICC-AVR application builder : 2008-12-13
0000 ; **Target : M16
0000 ; **Crystal: 7.3728Mhz
0000 ; **PC0--->SCL PC1--->SDA PD6--->Write_EN
0000 ; **
0000 ; **描述:按键K0被按下一次,数码管的最低位会加一,并存储在24C02中,下一次系统启动时,会读取此数据并显示。
0000 ; **
0000 ; **
0000 ; **涉及知识点:
0000 ; ** I2C
0000 ; **
0000 ; **
0000 ; *******************************************************************************************************/
0000 ;
0000 ; #include<iom16v.h>
0000 ; #include<macros.h>
0000 ; #include"Define.h"
0000 ;
0000 ; #define fose 7372800
0000 ;
0000 ; #define SCL 0
0000 ; #define SDA 1
0000 ;
0000 ; #define i2c_ddr DDRC
0000 ; #define i2c_port PORTC
0000 ; #define i2c_pin PINC
0000 ;
0000 ; #define AT24C02_ADDR 0xA0 //EEPROM设备地址
0000 ; //定义I2C的延迟参数
0000 ; #define DelayX 100 //7.3M=>1; 8.4M=>2.建议5,因为将来的ClockCPU可以是16M
0000 ;
0000 ;
0000 ; #define SCL_1 {i2c_port|=1<<SCL;Delay_us(DelayX);}
0000 ; #define SCL_0 {i2c_port&=~(1<<SCL);Delay_us(DelayX);}
0000 ; #define SDA_1 {i2c_port|=1<<SDA;Delay_us(DelayX);}
0000 ; #define SDA_0 {i2c_port&=~(1<<SDA);Delay_us(DelayX);}
0000 ;
0000 ; #define Write_EN_DO DDRD |= (1<<6);
0000 ; #define Write_EN_1 PORTD|= (1<<6);
0000 ; #define Write_EN_0 PORTD&=~(1<<6);
0000 ;
0000 ;
0000 ; unsigned char DISP_NUM; //显示的位数
0000 ; unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7}; //三位位选码
0000 ; unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
0000 ; unsigned char DISP_DATA[4]={0,0,0,0}; //显示的数字
0000 ;
0000 ; void I2C_Ini(void);
0000 ; void IICStart(void);
0000 ; void IICStop(void);
0000 ; uint8 IICRecAck(void);
0000 ; uint8 IICReceiveByte(void);
0000 ; void IICSendByte(uint8 sendbyte);
0000 ; void IICNoAck(void);
0000 ; void IICACK(void);
0000 ; uint8 i2c_Read(uint8 subAddr,uint8 device);
0000 ; void i2c_Write(uint8 subAddr,uint8 device,uint8 data);
0000 ;
0000 ;
0000 ;
0000 ; void Delay_us(unsigned int time)
0000 ; {
0000 L2:
0000 .dbline 85
0000 L3:
0000 .dbline 85
0000 ; while(time--);
0000 1801 movw R2,R16
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 2220 tst R2
0008 D9F7 brne L2
000A 3320 tst R3
000C C9F7 brne L2
000E X0:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 i
0010 .dbend
0010 .dbfunc e Delay_ms _Delay_ms fV
0010 ; time -> R20,R21
.even
0010 _Delay_ms::
0010 0E940000 xcall push_gset1
0014 A801 movw R20,R16
0016 .dbline -1
0016 .dbline 89
0016 ; }
0016 ;
0016 ; void Delay_ms(unsigned int time)
0016 ; {
0016 03C0 xjmp L7
0018 L6:
0018 .dbline 91
0018 .dbline 92
0018 08EE ldi R16,1000
001A 13E0 ldi R17,3
001C F1DF xcall _Delay_us
001E .dbline 93
001E L7:
001E .dbline 90
001E ; while(time--)
001E 1A01 movw R2,R20
0020 4150 subi R20,1
0022 5040 sbci R21,0
0024 2220 tst R2
0026 C1F7 brne L6
0028 3320 tst R3
002A B1F7 brne L6
002C X1:
002C .dbline -2
002C L5:
002C 0E940000 xcall pop_gset1
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r time 20 i
0032 .dbend
0032 .dbfunc e INT0_Init _INT0_Init fV
.even
0032 _INT0_Init::
0032 .dbline -1
0032 .dbline 96
0032 ; {
0032 ; Delay_us(1000);
0032 ; }
0032 ; }
0032 ; void INT0_Init()
0032 ; {
0032 .dbline 97
0032 ; GIFR |=0X40; //清楚标志位
0032 8AB7 in R24,0x3a
0034 8064 ori R24,64
0036 8ABF out 0x3a,R24
0038 .dbline 99
0038 ; //MCUCR|=0X03; //上升沿触发中断
0038 ; MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断
0038 85B7 in R24,0x35
003A 8260 ori R24,2
003C 85BF out 0x35,R24
003E .dbline 99
003E 85B7 in R24,0x35
0040 8E7F andi R24,254
0042 85BF out 0x35,R24
0044 .dbline 100
0044 ; GICR |=0X40; //使能外部中断0
0044 8BB7 in R24,0x3b
0046 8064 ori R24,64
0048 8BBF out 0x3b,R24
004A .dbline -2
004A L9:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbend
.area vector(rom, abs)
.org 4
0004 0C942600 jmp _int0_isr
.area text(rom, con, rel)
004C .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
004C .dbfunc e int0_isr _int0_isr fV
.even
004C _int0_isr::
004C 0E940000 xcall push_lset
0050 2197 sbiw R28,1
0052 .dbline -1
0052 .dbline 105
0052 ; }
0052 ;
0052 ; #pragma interrupt_handler int0_isr:2
0052 ; void int0_isr(void)
0052 ; {
0052 .dbline 106
0052 ; DISP_DATA[3]++;
0052 80911100 lds R24,_DISP_DATA+3
0056 8F5F subi R24,255 ; addi 1
0058 80931100 sts _DISP_DATA+3,R24
005C .dbline 107
005C ; if(DISP_DATA[3]>9)
005C 89E0 ldi R24,9
005E 20901100 lds R2,_DISP_DATA+3
0062 8215 cp R24,R2
0064 18F4 brsh L12
0066 .dbline 108
0066 ; {
0066 .dbline 109
0066 ; DISP_DATA[3]=0;
0066 2224 clr R2
0068 20921100 sts _DISP_DATA+3,R2
006C .dbline 110
006C ; }
006C L12:
006C .dbline 111
006C ; Write_EN_0;
006C 9698 cbi 0x12,6
006E .dbline 111
006E .dbline 112
006E ; i2c_Write(0x02,AT24C02_ADDR,DISP_DATA[3]);
006E 20901100 lds R2,_DISP_DATA+3
0072 2882 std y+0,R2
0074 20EA ldi R18,160
0076 02E0 ldi R16,2
0078 1BD1 xcall _i2c_Write
007A .dbline 113
007A ; Write_EN_1;
007A 969A sbi 0x12,6
007C .dbline 113
007C .dbline -2
007C L10:
007C 2196 adiw R28,1
007E 0E940000 xcall pop_lset
0082 .dbline 0 ; func end
0082 1895 reti
0084 .dbend
0084 .dbfunc e Display _Display fV
.even
0084 _Display::
0084 .dbline -1
0084 .dbline 118
0084 .dbline 119
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -