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

📄 ds1302.lst

📁 16个单片机c语言实验程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
     25D 940C 03A7 JMP	pop_xgsetF00C
_WriteChar:
  t                    --> R12
  i                    --> R10
  pBuffer              --> R20
  num                  --> Y,+8
  col                  --> R10
  row                  --> R22
     25F 940E 03AE CALL	push_xgsetF03C
     261 2EA2      MOV	R10,R18
     262 2F60      MOV	R22,R16
     263 854A      LDD	R20,Y+10
     264 855B      LDD	R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置写任意多个字符
(0210) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0211) //       ‘col’要写的字符所在的列,只能为0---15
(0212) //       ‘num’要写字符的个数
(0213) //       ‘pbuffer’要写字符的首地址
(0214) //================================================================== 
(0215) void	WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) 	uchar i,t;
(0218) 	if (row == 1)	row = 0x80 + col;
     265 3061      CPI	R22,1
     266 F419      BNE	0x026A
     267 2D6A      MOV	R22,R10
     268 5860      SUBI	R22,0x80
     269 C002      RJMP	0x026C
(0219) 	else	row = 0xC0 + col;
     26A 2D6A      MOV	R22,R10
     26B 5460      SUBI	R22,0x40
(0220) 	writecom(row);
     26C 2F06      MOV	R16,R22
     26D DECD      RCALL	_writecom
(0221) 	//if (num<=0 | num>9)	num =0x30;
(0222) 	//else	num = 0x30 + num;
(0223) 
(0224) 	PORTA|=(1<<RS);
     26E 9ADD      SBI	0x1B,5
(0225) 	s_ms(500);
     26F EF04      LDI	R16,0xF4
     270 E011      LDI	R17,1
     271 DE95      RCALL	_s_ms
(0226) 	PORTA&=~(1<<RW);
     272 98DE      CBI	0x1B,6
(0227) 	s_ms(500);
     273 EF04      LDI	R16,0xF4
     274 E011      LDI	R17,1
     275 DE91      RCALL	_s_ms
(0228) 	for(i=num;i!=0;i--)
     276 84A8      LDD	R10,Y+8
     277 84B9      LDD	R11,Y+9
     278 C014      RJMP	0x028D
(0229) 	{
(0230) 		t = *pBuffer;
     279 01FA      MOVW	R30,R20
     27A 80C0      LDD	R12,Z+0
(0231) 		s_ms(500);
     27B EF04      LDI	R16,0xF4
     27C E011      LDI	R17,1
     27D DE89      RCALL	_s_ms
(0232) 		PORTD = t;
     27E BAC2      OUT	0x12,R12
(0233) 		s_ms(500);
     27F EF04      LDI	R16,0xF4
     280 E011      LDI	R17,1
     281 DE85      RCALL	_s_ms
(0234) 		PORTA|=(1<<EN);
     282 9ADF      SBI	0x1B,7
(0235) 		s_ms(500);
     283 EF04      LDI	R16,0xF4
     284 E011      LDI	R17,1
     285 DE81      RCALL	_s_ms
(0236) 		PORTA&=~(1<<EN);		
     286 98DF      CBI	0x1B,7
(0237) 		s_ms(500);		
     287 EF04      LDI	R16,0xF4
     288 E011      LDI	R17,1
     289 DE7D      RCALL	_s_ms
(0238) 		pBuffer++;
     28A 5F4F      SUBI	R20,0xFF
     28B 4F5F      SBCI	R21,0xFF
     28C 94AA      DEC	R10
     28D 20AA      TST	R10
     28E F751      BNE	0x0279
     28F 940C 03B7 JMP	pop_xgsetF03C
_s_1ms:
  aa                   --> R20
  ms                   --> R16
     291 934A      ST	R20,-Y
     292 935A      ST	R21,-Y
FILE: E:\16实验程序\ds1302\ds1302_main.c
(0001) //时钟电路DS1302试验程序
(0002) //使用1602液晶显示
(0003) 
(0004) #include "iom16v.h"
(0005) #include "ds1302.h"
(0006) #include "1602.h"
(0007) 
(0008) uchar aa[]={'-'};
(0009) //时钟数据
(0010) unsigned char time_data[8] = {0x21,0x11,0x11,0x12,0x18,0x52,0x00,0x02};
(0011) 
(0012) //在16M延时1ms的延时函数
(0013) void s_1ms(unsigned int ms)
(0014) {
(0015)     unsigned int aa;
(0016) 	for(;ms>=1;ms--)
     293 C00C      RJMP	0x02A0
(0017) 	{
(0018) 	for(aa=0;aa<=2000;aa++)
     294 2744      CLR	R20
     295 2755      CLR	R21
     296 C002      RJMP	0x0299
     297 5F4F      SUBI	R20,0xFF
     298 4F5F      SBCI	R21,0xFF
     299 ED80      LDI	R24,0xD0
     29A E097      LDI	R25,7
     29B 1784      CP	R24,R20
     29C 0795      CPC	R25,R21
     29D F7C8      BCC	0x0297
     29E 5001      SUBI	R16,1
     29F 4010      SBCI	R17,0
     2A0 3001      CPI	R16,1
     2A1 E0E0      LDI	R30,0
     2A2 071E      CPC	R17,R30
     2A3 F780      BCC	0x0294
     2A4 9159      LD	R21,Y+
     2A5 9149      LD	R20,Y+
     2A6 9508      RET
_main:
  temp                 --> R20
     2A7 9724      SBIW	R28,4
(0019) 	{;}
(0020) 	}
(0021) }	
(0022) 
(0023) //主函数
(0024) void main() 
(0025) {
(0026) 	unsigned char temp;
(0027) 	//端口初始化
(0028) 	PORTA = 0xFF;				
     2A8 EF8F      LDI	R24,0xFF
     2A9 BB8B      OUT	0x1B,R24
(0029) 	DDRA = 0xFF;				
     2AA BB8A      OUT	0x1A,R24
(0030) 	PORTB = 0xF0;				
     2AB EF80      LDI	R24,0xF0
     2AC BB88      OUT	0x18,R24
(0031) 	DDRB = 0xFF;				
     2AD EF8F      LDI	R24,0xFF
     2AE BB87      OUT	0x17,R24
(0032) 	PORTC = 0x7F;
     2AF E78F      LDI	R24,0x7F
     2B0 BB85      OUT	0x15,R24
(0033) 	DDRC = 0x80;
     2B1 E880      LDI	R24,0x80
     2B2 BB84      OUT	0x14,R24
(0034) 	PORTD = 0x00;
     2B3 2422      CLR	R2
     2B4 BA22      OUT	0x12,R2
(0035) 	DDRD = 0xFF;
     2B5 EF8F      LDI	R24,0xFF
     2B6 BB81      OUT	0x11,R24
(0036) 
(0037) 	s_1ms(20);
     2B7 E104      LDI	R16,0x14
     2B8 E010      LDI	R17,0
     2B9 DFD7      RCALL	_s_1ms
(0038) 	//1602液晶初始化
(0039) 	LcdInit();
     2BA DE9C      RCALL	_LcdInit
(0040) 	//时钟芯片DS1302初始化
(0041) 	ds1302_init();
     2BB DE46      RCALL	_ds1302_init
(0042) 	s_1ms(10);
     2BC E00A      LDI	R16,0xA
     2BD E010      LDI	R17,0
     2BE DFD2      RCALL	_s_1ms
(0043) 	//写入初始的时间
(0044) 	ds1302_write_time(time_data);
     2BF E601      LDI	R16,0x61
     2C0 E010      LDI	R17,0
     2C1 DDD7      RCALL	_ds1302_write_time
     2C2 C0DA      RJMP	0x039D
(0045) 
(0046) 	while (1) {
(0047) 		s_1ms(100);
     2C3 E604      LDI	R16,0x64
     2C4 E010      LDI	R17,0
     2C5 DFCB      RCALL	_s_1ms
(0048) 		//读出时钟数据
(0049) 		ds1302_read_time(time_data);
     2C6 E601      LDI	R16,0x61
     2C7 E010      LDI	R17,0
     2C8 DE03      RCALL	_ds1302_read_time
(0050) 	    //显示年份
(0051) 		WriteNum(1,3,2);   //2
     2C9 E082      LDI	R24,2
     2CA E090      LDI	R25,0
     2CB 8399      STD	Y+1,R25
     2CC 8388      STD	Y+0,R24
     2CD E023      LDI	R18,3
     2CE E030      LDI	R19,0
     2CF E001      LDI	R16,1
     2D0 E010      LDI	R17,0
     2D1 DF45      RCALL	_WriteNum
(0052) 		WriteNum(1,4,0);   //0
     2D2 2422      CLR	R2
     2D3 2433      CLR	R3
     2D4 8239      STD	Y+1,R3
     2D5 8228      STD	Y+0,R2
     2D6 E024      LDI	R18,4
     2D7 E030      LDI	R19,0
     2D8 E001      LDI	R16,1
     2D9 E010      LDI	R17,0
     2DA DF3C      RCALL	_WriteNum
(0053) 		temp = (time_data[1] >> 4) ;
     2DB 9140 0062 LDS	R20,time_data+1
     2DD 9542      SWAP	R20
     2DE 704F      ANDI	R20,0xF
(0054) 		WriteNum(1,5,temp);
     2DF 2E24      MOV	R2,R20
     2E0 2433      CLR	R3
     2E1 8239      STD	Y+1,R3
     2E2 8228      STD	Y+0,R2
     2E3 E025      LDI	R18,5
     2E4 E030      LDI	R19,0
     2E5 E001      LDI	R16,1
     2E6 E010      LDI	R17,0
     2E7 DF2F      RCALL	_WriteNum
(0055) 		temp = (time_data[1] & 0x0F);
     2E8 9140 0062 LDS	R20,time_data+1
     2EA 704F      ANDI	R20,0xF
(0056) 		WriteNum(1,6,temp);
     2EB 2E24      MOV	R2,R20
     2EC 2433      CLR	R3
     2ED 8239      STD	Y+1,R3
     2EE 8228      STD	Y+0,R2
     2EF E026      LDI	R18,6
     2F0 E030      LDI	R19,0
     2F1 E001      LDI	R16,1
     2F2 E010      LDI	R17,0
     2F3 DF23      RCALL	_WriteNum
(0057) 		WriteChar(1,7,2,aa);
     2F4 E680      LDI	R24,0x60
     2F5 E090      LDI	R25,0
     2F6 839B      STD	Y+3,R25
     2F7 838A      STD	Y+2,R24
     2F8 E082      LDI	R24,2
     2F9 E090      LDI	R25,0
     2FA 8399      STD	Y+1,R25
     2FB 8388      STD	Y+0,R24
     2FC E027      LDI	R18,7
     2FD E001      LDI	R16,1
     2FE DF60      RCALL	_WriteChar
(0058) 		
(0059) 		temp = (time_data[2] >> 4);
     2FF 9140 0063 LDS	R20,time_data+2
     301 9542      SWAP	R20
     302 704F      ANDI	R20,0xF
(0060) 		WriteNum(1,8,temp);
     303 2E24      MOV	R2,R20
     304 2433      CLR	R3
     305 8239      STD	Y+1,R3
     306 8228      STD	Y+0,R2
     307 E028      LDI	R18,0x8
     308 E030      LDI	R19,0
     309 E001      LDI	R16,1
     30A E010      LDI	R17,0
     30B DF0B      RCALL	_WriteNum
(0061) 		temp = (time_data[2] & 0x0F);
     30C 9140 0063 LDS	R20,time_data+2
     30E 704F      ANDI	R20,0xF
(0062) 		WriteNum(1,9,temp);
     30F 2E24      MOV	R2,R20
     310 2433      CLR	R3
     311 8239      STD	Y+1,R3
     312 8228      STD	Y+0,R2
     313 E029      LDI	R18,0x9
     314 E030      LDI	R19,0
     315 E001      LDI	R16,1
     316 E010      LDI	R17,0
     317 DEFF      RCALL	_WriteNum
(0063) 		WriteChar(1,10,2,aa);
     318 E680      LDI	R24,0x60
     319 E090      LDI	R25,0
     31A 839B      STD	Y+3,R25
     31B 838A      STD	Y+2,R24
     31C E082      LDI	R24,2
     31D E090      LDI	R25,0
     31E 8399      STD	Y+1,R25
     31F 8388      STD	Y+0,R24
     320 E02A      LDI	R18,0xA
     321 E001      LDI	R16,1
     322 DF3C      RCALL	_WriteChar
(0064) 		
(0065) 		temp = (time_data[3] >> 4);
     323 9140 0064 LDS	R20,time_data+3
     325 9542      SWAP	R20
     326 704F      ANDI	R20,0xF
(0066) 		WriteNum(1,11,temp);
     327 2E24      MOV	R2,R20
     328 2433      CLR	R3
     329 8239      STD	Y+1,R3
     32A 8228      STD	Y+0,R2
     32B E02B      LDI	R18,0xB
     32C E030      LDI	R19,0
     32D E001      LDI	R16,1
     32E E010      LDI	R17,0
     32F DEE7      RCALL	_WriteNum
(0067) 		temp = (time_data[3] & 0x0F);
     330 9140 0064 LDS	R20,time_data+3
     332 704F      ANDI	R20,0xF
(0068) 		WriteNum(1,12,temp);
     333 2E24      MOV	R2,R20
     334 2433      CLR	R3
     335 8239      STD	Y+1,R3
     336 8228      STD	Y+0,R2
     337 E02C      LDI	R18,0xC
     338 E030      LDI	R19,0
     339 E001      LDI	R16,1
     33A E010      LDI	R17,0
     33B DEDB      RCALL	_WriteNum
(0069) 		
(0070) 		temp = (time_data[4] >> 4);
     33C 9140 0065 LDS	R20,0x0065
     33E 9542      SWAP	R20
     33F 704F      ANDI	R20,0xF
(0071) 		WriteNum(2,4,temp);
     340 2E24      MOV	R2,R20
     341 2433      CLR	R3
     342 8239      STD	Y+1,R3
     343 8228      STD	Y+0,R2
     344 E024      LDI	R18,4
     345 E030      LDI	R19,0
     346 E002      LDI	R16,2
     347 E010      LDI	R17,0
     348 DECE      RCALL	_WriteNum
(0072) 		temp = (time_data[4] & 0x0F);
     349 9140 0065 LDS	R20,0x0065
     34B 704F      ANDI	R20,0xF
(0073) 		WriteNum(2,5,temp);
     34C 2E24      MOV	R2,R20
     34D 2433      CLR	R3
     34E 8239      STD	Y+1,R3
     34F 8228      STD	Y+0,R2
     350 E025      LDI	R18,5
     351 E030      LDI	R19,0
     352 E002      LDI	R16,2
     353 E010      LDI	R17,0
     354 DEC2      RCALL	_WriteNum
(0074) 		WriteChar(2,6,2,aa);
     355 E680      LDI	R24,0x60
     356 E090      LDI	R25,0
     357 839B      STD	Y+3,R25
     358 838A      STD	Y+2,R24
     359 E082      LDI	R24,2
     35A E090      LDI	R25,0
     35B 8399      STD	Y+1,R25
     35C 8388      STD	Y+0,R24
     35D E026      LDI	R18,6
     35E E002      LDI	R16,2
     35F DEFF      RCALL	_WriteChar
(0075) 		
(0076) 		temp = (time_data[5] >> 4);
     360 9140 0066 LDS	R20,0x0066
     362 9542      SWAP	R20
     363 704F      ANDI	R20,0xF
(0077) 		WriteNum(2,7,temp);
     364 2E24      MOV	R2,R20
     365 2433      CLR	R3
     366 8239      STD	Y+1,R3
     367 8228      STD	Y+0,R2
     368 E027      LDI	R18,7
     369 E030      LDI	R19,0
     36A E002      LDI	R16,2
     36B E010      LDI	R17,0
     36C DEAA      RCALL	_WriteNum
(0078) 		temp = (time_data[5] & 0x0F);
     36D 9140 0066 LDS	R20,0x0066
     36F 704F      ANDI	R20,0xF
(0079) 		WriteNum(2,8,temp);
     370 2E24      MOV	R2,R20
     371 2433      CLR	R3
     372 8239      STD	Y+1,R3
     373 8228      STD	Y+0,R2
     374 E028      LDI	R18,0x8
     375 E030      LDI	R19,0
     376 E002      LDI	R16,2
     377 E010      LDI	R17,0
     378 DE9E      RCALL	_WriteNum
(0080) 		WriteChar(2,9,2,aa);
     379 E680      LDI	R24,0x60
     37A E090      LDI	R25,0
     37B 839B      STD	Y+3,R25
     37C 838A      STD	Y+2,R24
     37D E082      LDI	R24,2
     37E E090      LDI	R25,0
     37F 8399      STD	Y+1,R25
     380 8388      STD	Y+0,R24
     381 E029      LDI	R18,0x9
     382 E002      LDI	R16,2
     383 DEDB      RCALL	_WriteChar
(0081) 		
(0082) 		temp = (time_data[6] >> 4);
     384 9140 0067 LDS	R20,0x0067
     386 9542      SWAP	R20
     387 704F      ANDI	R20,0xF
(0083) 		WriteNum(2,10,temp);
     388 2E24      MOV	R2,R20
     389 2433      CLR	R3
     38A 8239      STD	Y+1,R3
     38B 8228      STD	Y+0,R2
     38C E02A      LDI	R18,0xA
     38D E030      LDI	R19,0
     38E E002      LDI	R16,2
     38F E010      LDI	R17,0
     390 DE86      RCALL	_WriteNum
(0084) 		temp = (time_data[6] & 0x0F);
     391 9140 0067 LDS	R20,0x0067
     393 704F      ANDI	R20,0xF
(0085) 		WriteNum(2,11,temp);
FILE: <library>
     394 2E24      MOV	R2,R20
     395 2433      CLR	R3
     396 8239      STD	Y+1,R3
     397 8228      STD	Y+0,R2
     398 E02B      LDI	R18,0xB
     399 E030      LDI	R19,0
     39A E002      LDI	R16,2
     39B E010      LDI	R17,0
     39C DE7A      RCALL	_WriteNum
     39D CF25      RJMP	0x02C3
     39E 9624      ADIW	R28,4
     39F 9508      RET
push_xgsetF00C:
     3A0 937A      ST	R23,-Y
     3A1 936A      ST	R22,-Y
     3A2 935A      ST	R21,-Y
     3A3 934A      ST	R20,-Y
     3A4 92BA      ST	R11,-Y
     3A5 92AA      ST	R10,-Y
     3A6 9508      RET
pop_xgsetF00C:
     3A7 90A9      LD	R10,Y+
     3A8 90B9      LD	R11,Y+
     3A9 9149      LD	R20,Y+
     3AA 9159      LD	R21,Y+
     3AB 9169      LD	R22,Y+
     3AC 9179      LD	R23,Y+
     3AD 9508      RET
push_xgsetF03C:
     3AE 937A      ST	R23,-Y
     3AF 936A      ST	R22,-Y
     3B0 935A      ST	R21,-Y
     3B1 934A      ST	R20,-Y
     3B2 92DA      ST	R13,-Y
     3B3 92CA      ST	R12,-Y
     3B4 92BA      ST	R11,-Y
     3B5 92AA      ST	R10,-Y
     3B6 9508      RET
pop_xgsetF03C:
     3B7 90A9      LD	R10,Y+
     3B8 90B9      LD	R11,Y+
     3B9 90C9      LD	R12,Y+
     3BA 90D9      LD	R13,Y+
     3BB 9149      LD	R20,Y+
     3BC 9159      LD	R21,Y+
     3BD 9169      LD	R22,Y+
     3BE 9179      LD	R23,Y+
     3BF 9508      RET

⌨️ 快捷键说明

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