⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c02.s

📁 meg16 的所有功能实例
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module _24c02.c
	.area data(ram, con, rel)
_BitTab::
	.blkb 2
	.area idata
	.byte 254,253
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 251,247
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.dbsym e BitTab _BitTab A[4:4]c
_DispTab::
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.blkb 2
	.area idata
	.byte 125,7
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.dbsym e DispTab _DispTab A[10:10]c
_DISP_DATA::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.dbsym e DISP_DATA _DISP_DATA A[4:4]c
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.dbfunc e Delay_us _Delay_us fV
;           time -> R16,R17
	.even
_Delay_us::
	.dbline -1
	.dbline 84
; /****************************************Copyright (c)**************************************************
; **                               ADEmbed Development Co.,LTD.                                    
; **                                 http://www.adembed.com
; **--------------File Info-------------------------------------------------------------------------------
; ** File name:			24c02.c
; ** Last modified Date:  2008-12-13
; ** Last Version:		1.0
; ** Descriptions:		24c02 Test.
; ** 
; **------------------------------------------------------------------------------------------------------
; ** Created by:			junbolu
; ** Created date:		2008-12-13
; ** Version:				1.0
; ** Descriptions:		
; **
; **------------------------------------------------------------------------------------------------------
; ** Modified by:
; ** Modified date:
; ** Version:
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; **ICC-AVR application builder : 2008-12-13
; **Target : M16
; **Crystal: 7.3728Mhz
; **PC0--->SCL		PC1--->SDA			  PD6--->Write_EN
; **
; **描述:按键K0被按下一次,数码管的最低位会加一,并存储在24C02中,下一次系统启动时,会读取此数据并显示。
; **      
; **
; **涉及知识点:
; **          I2C
; **           
; **			
; *******************************************************************************************************/
; 
; #include<iom16v.h>
; #include<macros.h>
; #include"Define.h"
; 
; #define		fose	                        7372800
; 
; #define     SCL                                 0
; #define     SDA                                 1
;  
; #define 	i2c_ddr                         DDRC
; #define 	i2c_port                        PORTC
; #define 	i2c_pin                         PINC      
; 
; #define 	AT24C02_ADDR					0xA0  //EEPROM设备地址
; //定义I2C的延迟参数
; #define    DelayX	100			//7.3M=>1;	8.4M=>2.建议5,因为将来的ClockCPU可以是16M
; 
; 
; #define    SCL_1    {i2c_port|=1<<SCL;Delay_us(DelayX);}
; #define    SCL_0    {i2c_port&=~(1<<SCL);Delay_us(DelayX);}
; #define    SDA_1    {i2c_port|=1<<SDA;Delay_us(DelayX);}
; #define    SDA_0    {i2c_port&=~(1<<SDA);Delay_us(DelayX);}
; 
; #define	   Write_EN_DO        DDRD |= (1<<6);
; #define	   Write_EN_1         PORTD|= (1<<6);
; #define	   Write_EN_0         PORTD&=~(1<<6);
; 
; 
; unsigned char DISP_NUM;							//显示的位数
; unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7};	//三位位选码
; unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
; unsigned char DISP_DATA[4]={0,0,0,0};		    //显示的数字
; 
; void I2C_Ini(void);
;  void IICStart(void);
;  void IICStop(void);
;  uint8 IICRecAck(void);
;  uint8 IICReceiveByte(void);
;  void IICSendByte(uint8 sendbyte);
;  void IICNoAck(void);
;  void IICACK(void);
;  uint8 i2c_Read(uint8 subAddr,uint8 device);
;  void i2c_Write(uint8 subAddr,uint8 device,uint8 data);
; 
; 
; 
; void Delay_us(unsigned int time)
; {
L2:
	.dbline 85
L3:
	.dbline 85
; while(time--);
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L2
	tst R3
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e Delay_ms _Delay_ms fV
;           time -> R20,R21
	.even
_Delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 89
; }
; 
; void Delay_ms(unsigned int time)
; {
	xjmp L7
L6:
	.dbline 91
	.dbline 92
	ldi R16,1000
	ldi R17,3
	xcall _Delay_us
	.dbline 93
L7:
	.dbline 90
; while(time--)
	movw R2,R20
	subi R20,1
	sbci R21,0
	tst R2
	brne L6
	tst R3
	brne L6
X1:
	.dbline -2
L5:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e INT0_Init _INT0_Init fV
	.even
_INT0_Init::
	.dbline -1
	.dbline 96
; 	{
; 	Delay_us(1000);
; 	}
; }
; void INT0_Init()
; {
	.dbline 97
;  GIFR |=0X40;              //清楚标志位
	in R24,0x3a
	ori R24,64
	out 0x3a,R24
	.dbline 99
;  //MCUCR|=0X03; 			   //上升沿触发中断	
;  MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断	
	in R24,0x35
	ori R24,2
	out 0x35,R24
	.dbline 99
	in R24,0x35
	andi R24,254
	out 0x35,R24
	.dbline 100
;  GICR |=0X40;  			   //使能外部中断0
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	xcall push_lset
	sbiw R28,1
	.dbline -1
	.dbline 105
; }
; 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 106
;  DISP_DATA[3]++;
	lds R24,_DISP_DATA+3
	subi R24,255    ; addi 1
	sts _DISP_DATA+3,R24
	.dbline 107
;  if(DISP_DATA[3]>9)
	ldi R24,9
	lds R2,_DISP_DATA+3
	cp R24,R2
	brsh L12
	.dbline 108
;      {
	.dbline 109
; 	 DISP_DATA[3]=0;
	clr R2
	sts _DISP_DATA+3,R2
	.dbline 110
; 	 }
L12:
	.dbline 111
;  Write_EN_0;
	cbi 0x12,6
	.dbline 111
	.dbline 112
;  i2c_Write(0x02,AT24C02_ADDR,DISP_DATA[3]);
	lds R2,_DISP_DATA+3
	std y+0,R2
	ldi R18,160
	ldi R16,2
	xcall _i2c_Write
	.dbline 113
;  Write_EN_1;
	sbi 0x12,6
	.dbline 113
	.dbline -2
L10:
	adiw R28,1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Display _Display fV
	.even
_Display::
	.dbline -1
	.dbline 118
	.dbline 119
	clr R2
	out 0x1b,R2
	.dbline 120
	ldi R24,<_BitTab
	ldi R25,>_BitTab
	lds R30,_DISP_NUM
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
	.dbline 121
	ldi R24,<_DISP_DATA
	ldi R25,>_DISP_DATA
	lds R30,_DISP_NUM
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<_DispTab
	ldi R25,>_DispTab
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 124
	lds R24,_DISP_NUM
	subi R24,255    ; addi 1
	sts _DISP_NUM,R24
	.dbline 125
	cpi R24,4
	brne L18
	.dbline 126
	clr R2
	sts _DISP_NUM,R2
L18:
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 76
	jmp _timer0comp
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.c
	.dbfunc e timer0comp _timer0comp fV
	.even
_timer0comp::
	xcall push_lset
	.dbline -1
	.dbline 131
; }
; //显示函数,DISP_NUM决定显示哪个LED
; //采用共阴LED动态显示方法,定时中断函数里面调用
; void Display(void)		
; {
;  PORTA=0x00;					   			//清除显示再位选
;  PORTB=BitTab[DISP_NUM];					//PB口接位选
;  PORTA=DispTab[DISP_DATA[DISP_NUM]];		//PA口接LED的段码
; 
;  
;  DISP_NUM++;			//先显示高位,再显示低位
;  if(DISP_NUM==4)
;     DISP_NUM=0;
; }
; 
; #pragma interrupt_handler timer0comp:20
; void timer0comp (void)
; {
	.dbline 132
;  Display();
	xcall _Display
	.dbline -2
L20:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 136
; } 
; 
; void main(void)
; {
	.dbline 138
;  
;  DDRA=0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 139
;  PORTA=0X00;
	clr R2
	out 0x1b,R2
	.dbline 140
;  DDRB=0X0F;
	ldi R24,15
	out 0x17,R24
	.dbline 141
;  PORTB=0X00;
	out 0x18,R2
	.dbline 144
;  
;  //按键0端口初始化
;  DDRD &=~0x04;	   	//设置PD2为输入   	   						
	cbi 0x11,2
	.dbline 145
;  PORTD|=0x04;		//设置PD2为上拉
	sbi 0x12,2
	.dbline 147
;  
;  INT0_Init();                 //TART初始化
	xcall _INT0_Init
	.dbline 150
;  
;  //t/c0初始化(10ms)
;  TCCR0=0X0d;
	ldi R24,13
	out 0x33,R24
	.dbline 151
;  TCNT0=0X00;
	clr R2
	out 0x32,R2
	.dbline 152
;  OCR0=0X48;
	ldi R24,72
	out 0x3c,R24
	.dbline 153
;  TIMSK=0X02;
	ldi R24,2
	out 0x39,R24
	.dbline 156
; 
;  //asm("sei");
;  SEI();                       //全局中断使能
	sei
	.dbline 158
;  
;  I2C_Ini();
	xcall _I2C_Ini
	.dbline 160
;  
;  Write_EN_DO;
	sbi 0x11,6
	.dbline 160
	.dbline 161
;  Write_EN_1;
	sbi 0x12,6
	.dbline 161
	.dbline 162
;  DISP_DATA[3]=i2c_Read(0x02,AT24C02_ADDR);
	ldi R18,160
	ldi R16,2
	xcall _i2c_Read
	sts _DISP_DATA+3,R16
	.dbline 164
; 
;  for(;;)
L23:
	.dbline 165
	.dbline 167
	.dbline 164
	.dbline 164
	xjmp L23
X2:
	.dbline -2
L21:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e I2C_Ini _I2C_Ini fV
	.even
_I2C_Ini::
	.dbline -1
	.dbline 174
; 	{ 
;     
; 	}
; }
; 
; 
; //=======================================================================
; //初始化端口
; void I2C_Ini(void)
; {
	.dbline 175
; 	i2c_ddr|=(1<<SCL);			//SCK为输出
	sbi 0x14,0
	.dbline 176
; 	i2c_ddr|=(1<<SDA);		    //SDA为双向的,先设置为输出
	sbi 0x14,1
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e IICStart _IICStart fV
	.even
_IICStart::
	.dbline -1
	.dbline 183
; 
; 
; }
; //=======================================================================
; //启动总线。根据IIC协议,SCL为1时,SDA从1转变为0。
; void IICStart(void)
; {   SCL_0;
	.dbline 183
	.dbline 183
	cbi 0x15,0
	.dbline 183
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 183
	.dbline 183
	.dbline 185
; 
; 	SDA_1;
	.dbline 185
	sbi 0x15,1
	.dbline 185
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 185
	.dbline 185
	.dbline 186
; 	SCL_1;
	.dbline 186
	sbi 0x15,0
	.dbline 186
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 186
	.dbline 186
	.dbline 187
; 	SDA_0;
	.dbline 187
	cbi 0x15,1
	.dbline 187
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 187
	.dbline 187
	.dbline 188
; 	SCL_0;
	.dbline 188
	cbi 0x15,0
	.dbline 188
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 188
	.dbline 188
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e IICStop _IICStop fV
	.even
_IICStop::
	.dbline -1
	.dbline 193
; }
; //=======================================================================
; //停止IIC总线。根据IIC协议,SCL为1时,SDA从0转变为1。
; void IICStop(void)
; {
	.dbline 194
; 	SCL_0;
	.dbline 194
	cbi 0x15,0
	.dbline 194
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 194
	.dbline 194
	.dbline 195
; 	SDA_0;
	.dbline 195
	cbi 0x15,1
	.dbline 195
	ldi R16,100
	ldi R17,0
	xcall _Delay_us
	.dbline 195
	.dbline 195
	.dbline 196
; 	SCL_1;
	.dbline 196
	sbi 0x15,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -