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

📄 avrstudy.lst

📁 AVR学习开发 板
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0288) 	vstr[4] = time[4]%16+0x30;
    03A4 E120      LDI	R18,0x10
    03A5 E030      LDI	R19,0
    03A6 01F5      MOVW	R30,R10
    03A7 8104      LDD	R16,Z+4
    03A8 2711      CLR	R17
    03A9 D69D      RCALL	mod16s
    03AA 01C8      MOVW	R24,R16
    03AB 96C0      ADIW	R24,0x30
    03AC 8799      STD	Y+9,R25
    03AD 8788      STD	Y+8,R24
(0289) 	vstr[5] = '/';
    03AE E28F      LDI	R24,0x2F
    03AF E090      LDI	R25,0
    03B0 879B      STD	Y+11,R25
    03B1 878A      STD	Y+10,R24
(0290) 	vstr[6] = time[6]/16+0x30;
    03B2 E120      LDI	R18,0x10
    03B3 E030      LDI	R19,0
    03B4 01F5      MOVW	R30,R10
    03B5 8106      LDD	R16,Z+6
    03B6 2711      CLR	R17
    03B7 D693      RCALL	div16s
    03B8 01C8      MOVW	R24,R16
    03B9 96C0      ADIW	R24,0x30
    03BA 879D      STD	Y+13,R25
    03BB 878C      STD	Y+12,R24
(0291) 	vstr[7] = time[6]%16+0x30;
    03BC E120      LDI	R18,0x10
    03BD E030      LDI	R19,0
    03BE 01F5      MOVW	R30,R10
    03BF 8106      LDD	R16,Z+6
    03C0 2711      CLR	R17
    03C1 D685      RCALL	mod16s
    03C2 01C8      MOVW	R24,R16
    03C3 96C0      ADIW	R24,0x30
    03C4 879F      STD	Y+15,R25
    03C5 878E      STD	Y+14,R24
(0292) 	WriteCommand(0x30);              //时间显示起始坐标
    03C6 E300      LDI	R16,0x30
    03C7 DE05      RCALL	_WriteCommand
(0293) 	WriteCommand(0x92);
    03C8 E902      LDI	R16,0x92
    03C9 DE03      RCALL	_WriteCommand
(0294) 	for(i=0;i<8;i++)
    03CA 2766      CLR	R22
    03CB 2777      CLR	R23
    03CC C00E      RJMP	0x03DB
(0295) 	{ 
(0296) 	    vstrtemp=vstr[i];                
    03CD E002      LDI	R16,2
    03CE E010      LDI	R17,0
    03CF 019B      MOVW	R18,R22
    03D0 D720      RCALL	empy16s
    03D1 01F8      MOVW	R30,R16
    03D2 01CE      MOVW	R24,R28
    03D3 0FE8      ADD	R30,R24
    03D4 1FF9      ADC	R31,R25
    03D5 8140      LDD	R20,Z+0
    03D6 8151      LDD	R21,Z+1
(0297)   		WriteData(vstrtemp);
    03D7 2F04      MOV	R16,R20
    03D8 DE03      RCALL	_WriteData
    03D9 5F6F      SUBI	R22,0xFF
    03DA 4F7F      SBCI	R23,0xFF
    03DB 3068      CPI	R22,0x8
    03DC E0E0      LDI	R30,0
    03DD 077E      CPC	R23,R30
    03DE F370      BCS	0x03CD
(0298) 	}
(0299) 	vstr[0] = time[2]/16+0x30;
    03DF E120      LDI	R18,0x10
    03E0 E030      LDI	R19,0
    03E1 01F5      MOVW	R30,R10
    03E2 8102      LDD	R16,Z+2
    03E3 2711      CLR	R17
    03E4 D666      RCALL	div16s
    03E5 01C8      MOVW	R24,R16
    03E6 96C0      ADIW	R24,0x30
    03E7 8399      STD	Y+1,R25
    03E8 8388      STD	Y+0,R24
(0300) 	vstr[1] = time[2]%16+0x30;
    03E9 E120      LDI	R18,0x10
    03EA E030      LDI	R19,0
    03EB 01F5      MOVW	R30,R10
    03EC 8102      LDD	R16,Z+2
    03ED 2711      CLR	R17
    03EE D658      RCALL	mod16s
    03EF 01C8      MOVW	R24,R16
    03F0 96C0      ADIW	R24,0x30
    03F1 839B      STD	Y+3,R25
    03F2 838A      STD	Y+2,R24
(0301) 	vstr[2] = ':';
    03F3 E38A      LDI	R24,0x3A
    03F4 E090      LDI	R25,0
    03F5 839D      STD	Y+5,R25
    03F6 838C      STD	Y+4,R24
(0302) 	vstr[3] = time[1]/16+0x30;
    03F7 E120      LDI	R18,0x10
    03F8 E030      LDI	R19,0
    03F9 01F5      MOVW	R30,R10
    03FA 8101      LDD	R16,Z+1
    03FB 2711      CLR	R17
    03FC D64E      RCALL	div16s
    03FD 01C8      MOVW	R24,R16
    03FE 96C0      ADIW	R24,0x30
    03FF 839F      STD	Y+7,R25
    0400 838E      STD	Y+6,R24
(0303) 	vstr[4] = time[1]%16+0x30;
    0401 E120      LDI	R18,0x10
    0402 E030      LDI	R19,0
    0403 01F5      MOVW	R30,R10
    0404 8101      LDD	R16,Z+1
    0405 2711      CLR	R17
    0406 D640      RCALL	mod16s
    0407 01C8      MOVW	R24,R16
    0408 96C0      ADIW	R24,0x30
    0409 8799      STD	Y+9,R25
    040A 8788      STD	Y+8,R24
(0304) 	vstr[5] = ':';
    040B E38A      LDI	R24,0x3A
    040C E090      LDI	R25,0
    040D 879B      STD	Y+11,R25
    040E 878A      STD	Y+10,R24
(0305) 	vstr[6] = time[0]/16+0x30;
    040F E120      LDI	R18,0x10
    0410 E030      LDI	R19,0
    0411 01F5      MOVW	R30,R10
    0412 8100      LDD	R16,Z+0
    0413 2711      CLR	R17
    0414 D636      RCALL	div16s
    0415 01C8      MOVW	R24,R16
    0416 96C0      ADIW	R24,0x30
    0417 879D      STD	Y+13,R25
    0418 878C      STD	Y+12,R24
(0306) 	vstr[7] = time[0]%16+0x30;
    0419 E120      LDI	R18,0x10
    041A E030      LDI	R19,0
    041B 01F5      MOVW	R30,R10
    041C 8100      LDD	R16,Z+0
    041D 2711      CLR	R17
    041E D628      RCALL	mod16s
    041F 01C8      MOVW	R24,R16
    0420 96C0      ADIW	R24,0x30
    0421 879F      STD	Y+15,R25
    0422 878E      STD	Y+14,R24
(0307) 	WriteCommand(0x30);              //时间显示起始坐标
    0423 E300      LDI	R16,0x30
    0424 DDA8      RCALL	_WriteCommand
(0308) 	WriteCommand(0x8a);
    0425 E80A      LDI	R16,0x8A
    0426 DDA6      RCALL	_WriteCommand
(0309) 	for(i=0;i<8;i++)
    0427 2766      CLR	R22
    0428 2777      CLR	R23
    0429 C00E      RJMP	0x0438
(0310) 	{ 
(0311)    	    vstrtemp=vstr[i];                
    042A E002      LDI	R16,2
    042B E010      LDI	R17,0
    042C 019B      MOVW	R18,R22
    042D D6C3      RCALL	empy16s
    042E 01F8      MOVW	R30,R16
    042F 01CE      MOVW	R24,R28
    0430 0FE8      ADD	R30,R24
    0431 1FF9      ADC	R31,R25
    0432 8140      LDD	R20,Z+0
    0433 8151      LDD	R21,Z+1
(0312)        	WriteData(vstrtemp);
    0434 2F04      MOV	R16,R20
    0435 DDA6      RCALL	_WriteData
    0436 5F6F      SUBI	R22,0xFF
    0437 4F7F      SBCI	R23,0xFF
    0438 3068      CPI	R22,0x8
    0439 E0E0      LDI	R30,0
    043A 077E      CPC	R23,R30
    043B F370      BCS	0x042A
    043C 9660      ADIW	R28,0x10
    043D D6C5      RCALL	pop_gset3
    043E 9508      RET
_delay_us:
  i                    --> R20
  us                   --> R22
    043F D6CF      RCALL	push_gset2
    0440 01B8      MOVW	R22,R16
FILE: E:\AVR学习专区\AVR学习板\delay.h
(0001) //===================延时函数========================
(0002) //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
(0003) //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
(0004) //==================================================
(0005) void delay_us(unsigned int us)		  
(0006) {
(0007)     unsigned int i;
(0008)  	us=us*5/4;		  	    //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
    0441 E005      LDI	R16,5
    0442 E010      LDI	R17,0
    0443 019B      MOVW	R18,R22
    0444 D6AC      RCALL	empy16s
    0445 01B8      MOVW	R22,R16
    0446 9576      LSR	R23
    0447 9567      ROR	R22
    0448 9576      LSR	R23
    0449 9567      ROR	R22
(0009)  	for( i=0;i<us;i++); 
    044A 2744      CLR	R20
    044B 2755      CLR	R21
    044C C002      RJMP	0x044F
    044D 5F4F      SUBI	R20,0xFF
    044E 4F5F      SBCI	R21,0xFF
    044F 1746      CP	R20,R22
    0450 0757      CPC	R21,R23
    0451 F3D8      BCS	0x044D
    0452 D6AE      RCALL	pop_gset2
    0453 9508      RET
_delay_ms:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0454 D6BA      RCALL	push_gset2
(0010) }
(0011) void delay_ms(unsigned int ms)		  
(0012) {
(0013)     unsigned int i,j;
(0014)  	for( i=0;i<ms;i++)
    0455 2744      CLR	R20
    0456 2755      CLR	R21
    0457 C00B      RJMP	0x0463
(0015)  	for(j=0;j<1141;j++); 	//1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
    0458 2766      CLR	R22
    0459 2777      CLR	R23
    045A C002      RJMP	0x045D
    045B 5F6F      SUBI	R22,0xFF
    045C 4F7F      SBCI	R23,0xFF
    045D 3765      CPI	R22,0x75
    045E E0E4      LDI	R30,4
    045F 077E      CPC	R23,R30
    0460 F3D0      BCS	0x045B
    0461 5F4F      SUBI	R20,0xFF
    0462 4F5F      SBCI	R21,0xFF
    0463 1740      CP	R20,R16
    0464 0751      CPC	R21,R17
    0465 F390      BCS	0x0458
    0466 D69A      RCALL	pop_gset2
    0467 9508      RET
FILE: E:\AVR学习专区\AVR学习板\mega8_spi.c
(0001) /****************************************************************************************
(0002)                         mega8的SPI功能实验   
(0003) 		                                                
(0004)              程序功能:使用MEGA8的SPI口控制74HC595,
(0005) 			           循环发送0-255到74hc595,
(0006) 					   使LED循环点亮
(0007)              硬件连接:SCK--SHCP,MOSI--DS,PB1--STCP
(0008) 			 			位时钟  ,  数据   ,  桢时钟				 
(0009) 					                                 作者:张国旗
(0010) 													 2008年12月29号       
(0011) ****************************************************************************************/
(0012) //============================
(0013) //  SPI 口初始化
(0014) //主机、高位在前、SCK在闲置时
(0015) //为低电平,SPI时钟为fosc/128
(0016) //============================
(0017) void spi_init()
(0018) {
(0019)     DDRB|=0x2f;          //设置SCK、MOSI、SS、使能为输出
_spi_init:
    0468 B387      IN	R24,0x17
    0469 628F      ORI	R24,0x2F
    046A BB87      OUT	0x17,R24
(0020) 	SPCR=0X53;          //设置SPI控制寄存器SPE、MSTR、SPR1、SPR0为1
    046B E583      LDI	R24,0x53
    046C B98D      OUT	0x0D,R24
    046D 9508      RET
_senddat:
  status               --> Y+1
  spi_data             --> R20
    046E D6A2      RCALL	push_gset1
    046F 2F40      MOV	R20,R16
(0021) }
(0022) //============================
(0023) //    数据发送子函数
(0024) //入口参数:spi_data
(0025) //============================
(0026) void senddat(uchar spi_data)
(0027) {
(0028)     uchar status;
(0029) 	SPSR=0;		   		 //清中断标志
    0470 2422      CLR	R2
    0471 B82E      OUT	0x0E,R2
(0030) 	PORTB&=~BIT(PB0); 	 //桢时钟
    0472 98C0      CBI	0x18,0
(0031) 	SPDR=~spi_data;
    0473 2E24      MOV	R2,R20
    0474 9420      COM	R2
    0475 B82F      OUT	0x0F,R2
(0032)     while(!(SPSR&=0x80));//等待操作完成
    0476 B18E      IN	R24,0x0E
    0477 7880      ANDI	R24,0x80
    0478 B98E      OUT	0x0E,R24
    0479 2388      TST	R24
    047A F3D9      BEQ	0x0476
(0033) 	SPSR=0;				 //清中断标志
    047B 2422      CLR	R2
    047C B82E      OUT	0x0E,R2
(0034) 	delay(10);
    047D E00A      LDI	R16,0xA
    047E E010      LDI	R17,0
    047F D410      RCALL	_delay
(0035) 	PORTB|=BIT(PB0);     //桢时钟
    0480 9AC0      SBI	0x18,0
    0481 D692      RCALL	pop_gset1
    0482 9508      RET
FILE: E:\AVR学习专区\AVR学习板\24cxx12864.c
(0001) /****************************************************************************************
(0002)                          AT24CXX的mega8控制程序   
(0003) 		                                                
(0004)              程序功能:该程序是用AVR来控制对AT24C256
(0005) 			           读写信号等的操作.
(0006)              硬件连接:
(0007) 			 显示部分用12864液晶来显示从24c256中读取的图片
(0008) 					                                 作者:张国旗
(0009) 													 2009年1月3号       
(0010) ****************************************************************************************/
(0011) #define uchar unsigned char
(0012) #define uint unsigned int
(0013) 
(0014) #define  START  	  0X08 	  		//START信号已发出
(0015) #define  RESTART  	  0X10 	  		//REPFEATED START信号已发出
(0016) #define  MT_SLA_ACK   0X18			//SLA+W已发出并收到ACK
(0017) #define  MT_DATA_ACK  0X28			//DATA已发出并收到ACK
(0018) #define  MT_RSLA_ACK  0X40			//SLA+R已发出并收到ACK
(0019) #define  MT_RDATA_ACK 0X50			//DATA已收到ACK已发出
(0020) #define  MT_RDATA_NACK 0X58			//DATA已收到NACK已发出
(0021) //==============各种时序操作信号函数================
(0022) #define Start() 	  (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))	//产生START信号
(0023) #define Stop() 		  (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))	//产生STOP信号
(0024) #define Wait() 		  while(!(TWCR&(1<<TWINT)))					//等待当前操作完成
(0025) #define TestACK() 	  (TWSR&0xF8)								//取出状态码
(0026) #define SetACK() 	  (TWCR|=(1<<TWEA))							//产生ACK
(0027) #define Twi_NoAcK()	  {TWCR=BIT(TWINT)|BIT(TWEN);}				//非应答信号
(0028) #define Writebyte(twi_d) {TWDR=(twi_d);TWCR=(1<<TWINT)|(1<<TWEN);}//发送一个字节(twi_d为写入的数据)
(0029) //========在此设定芯片地址=============
(0030) #define W_ADD_COM 0xa0	//写字节命令及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 0
(0031) #define R_ADD_COM 0xa1	//读命令字节及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 1
(0032) //=======在此设定芯片型号, 1代表24C01; 16代表24C16; 512代表24C512
(0033) #define e2prom 256	// <---在此设定芯片型号, 1代表24C01; 16代表24C16; 512代表24C512
(0034) #if e2prom==1
(0035) 	#define PAGE_SIZE 8
(0036) 	#define SIZE 0x007f
(0037) #elif e2prom==2
(0038) 	#define PAGE_SIZE 8
(0039) 	#define SIZE 0x00ff
(0040) #elif e2prom==4
(0041) 	#define PAGE_SIZE 16
(0042) 	#define SIZE 0x01ff
(0043) #elif e2prom==8
(0044) 	#define PAGE_SIZE 16
(0045) 	#define SIZE 0x03ff
(0046) #elif e2prom==16
(0047) 	#define PAGE_SIZE 16
(0048) 	#define SIZE 0x07ff
(0049) #elif e2prom==32
(0050) 	#define PAGE_SIZE 32
(0051) 	#define SIZE 0x0fff
(0052) #elif e2prom==64
(0053) 	#define PAGE_SIZE 32
(0054) 	#define SIZE 0x1fff
(0055) #elif e2prom==128
(0056) 	#define PAGE_SIZE 64
(0057) 	#define SIZE 0x3fff
(0058) #elif e2prom==256
(0059) 	#define PAGE_SIZE 64

⌨️ 快捷键说明

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