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

📄 time_1302.lst

📁 单片机实时时钟控制 C语言编写 源程序。
💻 LST
📖 第 1 页 / 共 3 页
字号:
  time2                --> Y+16
  time1                --> Y+0
  i                    --> R20
    01A1 D0B5      RCALL	push_gset1
    01A2 97A0      SBIW	R28,0x20
(0306) }
(0307) /********************************************************
(0308)   子程序名:   out_data_pc232()
(0309)   功    能:   串口发送时间数据到PC,
(0310)   输入参数:   /
(0311)   输出参数:   /
(0312)   描    述:   包括"当前的温度是:xxx.xx摄氏度",此程序借助LCD的显示缓冲区
(0313) ********************************************************/
(0314) void out_data_pc232(void) 
(0315) {
(0316) 	 uchar i;
(0317) 	 uchar time1[16]="  今天的日期是:";
    01A3 E28A      LDI	R24,0x2A
    01A4 E090      LDI	R25,0
    01A5 01FE      MOVW	R30,R28
    01A6 E100      LDI	R16,0x10
    01A7 E010      LDI	R17,0
    01A8 93FA      ST	R31,-Y
    01A9 93EA      ST	R30,-Y
    01AA 939A      ST	R25,-Y
    01AB 938A      ST	R24,-Y
    01AC D0C7      RCALL	asgncblk
(0318) 	 uchar time2[16]="  当前的时间是:";
    01AD E38A      LDI	R24,0x3A
    01AE E090      LDI	R25,0
    01AF 01FE      MOVW	R30,R28
    01B0 9670      ADIW	R30,0x10
    01B1 E100      LDI	R16,0x10
    01B2 E010      LDI	R17,0
    01B3 93FA      ST	R31,-Y
    01B4 93EA      ST	R30,-Y
    01B5 939A      ST	R25,-Y
    01B6 938A      ST	R24,-Y
    01B7 D0BC      RCALL	asgncblk
(0319) 	 
(0320)      for(i=0;i<16;i++)    //向串口发送数据
    01B8 2744      CLR	R20
    01B9 C008      RJMP	0x01C2
(0321)      { 
(0322)          write_pc232(time1[i]);
    01BA 01CE      MOVW	R24,R28
    01BB 2FE4      MOV	R30,R20
    01BC 27FF      CLR	R31
    01BD 0FE8      ADD	R30,R24
    01BE 1FF9      ADC	R31,R25
    01BF 8100      LDD	R16,Z+0
    01C0 DF73      RCALL	_write_pc232
    01C1 9543      INC	R20
    01C2 3140      CPI	R20,0x10
    01C3 F3B0      BCS	0x01BA
(0323)      } 
(0324) 	  write_pc232('2');            //年
    01C4 E302      LDI	R16,0x32
    01C5 DF6E      RCALL	_write_pc232
(0325) 	  write_pc232('0');
    01C6 E300      LDI	R16,0x30
    01C7 DF6C      RCALL	_write_pc232
(0326) 	  write_pc232(buf_time[7]);
    01C8 91000067  LDS	R16,0x67
    01CA DF69      RCALL	_write_pc232
(0327) 	  write_pc232(buf_time[8]);
    01CB 91000068  LDS	R16,0x68
    01CD DF66      RCALL	_write_pc232
(0328) 	  write_pc232('-');
    01CE E20D      LDI	R16,0x2D
    01CF DF64      RCALL	_write_pc232
(0329) 	  write_pc232(buf_time[10]);   //月
    01D0 9100006A  LDS	R16,0x6A
    01D2 DF61      RCALL	_write_pc232
(0330) 	  write_pc232(buf_time[11]);
    01D3 9100006B  LDS	R16,0x6B
    01D5 DF5E      RCALL	_write_pc232
(0331) 	  write_pc232('-');
    01D6 E20D      LDI	R16,0x2D
    01D7 DF5C      RCALL	_write_pc232
(0332) 	  write_pc232(buf_time[13]);   //日
    01D8 9100006D  LDS	R16,0x6D
    01DA DF59      RCALL	_write_pc232
(0333) 	  write_pc232(buf_time[14]);
    01DB 9100006E  LDS	R16,0x6E
    01DD DF56      RCALL	_write_pc232
(0334) 	  
(0335)      for(i=0;i<16;i++)    //向串口发送数据
    01DE 2744      CLR	R20
    01DF C009      RJMP	0x01E9
(0336)      { 
(0337)          write_pc232(time2[i]);
    01E0 01CE      MOVW	R24,R28
    01E1 9640      ADIW	R24,0x10
    01E2 2FE4      MOV	R30,R20
    01E3 27FF      CLR	R31
    01E4 0FE8      ADD	R30,R24
    01E5 1FF9      ADC	R31,R25
    01E6 8100      LDD	R16,Z+0
    01E7 DF4C      RCALL	_write_pc232
    01E8 9543      INC	R20
    01E9 3140      CPI	R20,0x10
    01EA F3A8      BCS	0x01E0
(0338)      } 
(0339) 	  write_pc232(buf_time[22]);   //时
    01EB 91000076  LDS	R16,0x76
    01ED DF46      RCALL	_write_pc232
(0340) 	  write_pc232(buf_time[23]);
    01EE 91000077  LDS	R16,0x77
    01F0 DF43      RCALL	_write_pc232
(0341) 	  write_pc232(':');
    01F1 E30A      LDI	R16,0x3A
    01F2 DF41      RCALL	_write_pc232
(0342) 	  write_pc232(buf_time[25]);   //分
    01F3 91000079  LDS	R16,0x79
    01F5 DF3E      RCALL	_write_pc232
(0343) 	  write_pc232(buf_time[26]);
    01F6 9100007A  LDS	R16,0x7A
    01F8 DF3B      RCALL	_write_pc232
(0344) 	  write_pc232(':');
    01F9 E30A      LDI	R16,0x3A
    01FA DF39      RCALL	_write_pc232
(0345) 	  write_pc232(buf_time[28]);   //秒
    01FB 9100007C  LDS	R16,0x7C
    01FD DF36      RCALL	_write_pc232
(0346) 	  write_pc232(buf_time[29]);
    01FE 9100007D  LDS	R16,0x7D
    0200 DF33      RCALL	_write_pc232
(0347) 	  
(0348) 	  write_pc232('\n'); 
    0201 E00A      LDI	R16,0xA
    0202 DF31      RCALL	_write_pc232
(0349)  	  write_pc232('\r'); //显示回车换行
    0203 E00D      LDI	R16,0xD
    0204 DF2F      RCALL	_write_pc232
    0205 96A0      ADIW	R28,0x20
    0206 D053      RCALL	pop_gset1
    0207 9508      RET
_main:
  buf_logo             --> Y+0
  data_old             --> R20
    0208 97A1      SBIW	R28,0x21
(0350) }
(0351) //*****************主程序**********************************
(0352) void main (void)
(0353) {
(0354)      uchar data_old;
(0355) 	 uchar buf_logo[]="    welcome!      www.itsn.cn!  ";
    0209 E48A      LDI	R24,0x4A
    020A E090      LDI	R25,0
    020B 01FE      MOVW	R30,R28
    020C E201      LDI	R16,0x21
    020D E010      LDI	R17,0
    020E 93FA      ST	R31,-Y
    020F 93EA      ST	R30,-Y
    0210 939A      ST	R25,-Y
    0211 938A      ST	R24,-Y
    0212 D061      RCALL	asgncblk
(0356) 	 
(0357)      mcu_Init();       //单片机初始化
    0213 DF2A      RCALL	_mcu_Init
(0358) 	 usart_Init();     //串口初始化
    0214 DF2E      RCALL	_usart_Init
(0359) 	 init_lcd();        //lcd初始化
    0215 DE81      RCALL	_init_lcd
(0360) 	 
(0361) 	 write_pc232('o'); //测试串口
    0216 E60F      LDI	R16,0x6F
    0217 DF1C      RCALL	_write_pc232
(0362)      write_pc232('k'); //测试串口
    0218 E60B      LDI	R16,0x6B
    0219 DF1A      RCALL	_write_pc232
(0363) 	 write_pc232('\n'); 
    021A E00A      LDI	R16,0xA
    021B DF18      RCALL	_write_pc232
(0364)  	 write_pc232('\r'); //显示回车换行
    021C E00D      LDI	R16,0xD
    021D DF16      RCALL	_write_pc232
(0365) 	 
(0366) 	 display_lcd(buf_logo);  //显示LOGO
    021E 018E      MOVW	R16,R28
    021F DE82      RCALL	_display_lcd
(0367) 	 spk (1000);           //上电蜂鸣器长响
    0220 EE08      LDI	R16,0xE8
    0221 DF26      RCALL	_spk
(0368) 	 DelaymS(2000);    //长延迟
    0222 ED00      LDI	R16,0xD0
    0223 E017      LDI	R17,7
    0224 DE45      RCALL	_DelaymS
(0369) 	 display_lcd(buf_time);  //开始工作,LCD刷新显示一屏
    0225 E600      LDI	R16,0x60
    0226 E010      LDI	R17,0
    0227 DE7A      RCALL	_display_lcd
(0370) 	 spk (100);           //开始工作,蜂鸣器短响
    0228 E604      LDI	R16,0x64
    0229 DF1E      RCALL	_spk
(0371) 	 
(0372) 	 //---------此段测试1302是否已经写过内容了,若写过就不再重新写。
(0373) 	 read_DS1302();      //读时间
    022A DEEC      RCALL	_read_DS1302
(0374) 	 if(buf_read[0] & 0x80)
    022B 90200089  LDS	R2,buf_read
    022D FE27      SBRS	R2,7
    022E C001      RJMP	0x0230
(0375) 	 {
(0376) 	    write_DS1302();  //写入需要的初始时间值,
    022F DEBD      RCALL	_write_DS1302
(0377) 	 }
(0378) 	 //------------------
(0379) 	 
(0380) 	 DelaymS(1);       //延迟
    0230 E001      LDI	R16,1
    0231 E010      LDI	R17,0
    0232 DE37      RCALL	_DelaymS
(0381) 	 read_DS1302();      //读时间
    0233 DEE3      RCALL	_read_DS1302
(0382) 	 data_old = buf_read[0];  //提取旧时钟的秒数值
    0234 91400089  LDS	R20,buf_read
    0236 C013      RJMP	0x024A
(0383) 	 while(1) //无限循环执行,此程序保证了一秒钟更新一次串口数据,更新一次LCD显示。
(0384) 	 {
(0385) 		   DelaymS(10);       //延迟
    0237 E00A      LDI	R16,0xA
    0238 E010      LDI	R17,0
    0239 DE30      RCALL	_DelaymS
(0386) 		   read_DS1302();      //读时间
    023A DEDC      RCALL	_read_DS1302
(0387) 		   if (data_old == buf_read[0])
    023B 90200089  LDS	R2,buf_read
    023D 1542      CP	R20,R2
    023E F421      BNE	0x0243
(0388) 		   {
(0389) 		       DelaymS(10);       //延迟
    023F E00A      LDI	R16,0xA
    0240 E010      LDI	R17,0
    0241 DE28      RCALL	_DelaymS
(0390) 		   }
    0242 C007      RJMP	0x024A
(0391) 		   else
(0392) 		   {
(0393) 		       data_conversion();  //将读出的数据分开,分别装入显存
    0243 DF0E      RCALL	_data_conversion
(0394) 		       display_lcd(buf_time);  //刷新显示一屏
    0244 E600      LDI	R16,0x60
    0245 E010      LDI	R17,0
    0246 DE5B      RCALL	_display_lcd
(0395) 		       out_data_pc232();  //串口将时间数据送PC
    0247 DF59      RCALL	_out_data_pc232
(0396) 			   data_old = buf_read[0]; //更新时钟的秒数值
FILE: <library>
    0248 91400089  LDS	R20,buf_read
    024A CFEC      RJMP	0x0237
    024B 96A1      ADIW	R28,0x21
    024C 9508      RET
pop_gset2:
    024D E0E2      LDI	R30,2
    024E C00C      RJMP	pop
push_gset5:
    024F 92FA      ST	R15,-Y
    0250 92EA      ST	R14,-Y
push_gset4:
    0251 92DA      ST	R13,-Y
    0252 92CA      ST	R12,-Y
push_gset3:
    0253 92BA      ST	R11,-Y
    0254 92AA      ST	R10,-Y
push_gset2:
    0255 937A      ST	R23,-Y
    0256 936A      ST	R22,-Y
push_gset1:
    0257 935A      ST	R21,-Y
    0258 934A      ST	R20,-Y
    0259 9508      RET
pop_gset1:
    025A E0E1      LDI	R30,1
pop:
    025B 9149      LD	R20,Y+
    025C 9159      LD	R21,Y+
    025D FDE0      SBRC	R30,0
    025E 9508      RET
    025F 9169      LD	R22,Y+
    0260 9179      LD	R23,Y+
    0261 FDE1      SBRC	R30,1
    0262 9508      RET
    0263 90A9      LD	R10,Y+
    0264 90B9      LD	R11,Y+
    0265 FDE2      SBRC	R30,2
    0266 9508      RET
    0267 90C9      LD	R12,Y+
    0268 90D9      LD	R13,Y+
    0269 FDE3      SBRC	R30,3
    026A 9508      RET
    026B 90E9      LD	R14,Y+
    026C 90F9      LD	R15,Y+
    026D 9508      RET
lsl8:
    026E 2311      TST	R17
    026F F019      BEQ	0x0273
    0270 0F00      LSL	R16
    0271 951A      DEC	R17
    0272 CFFB      RJMP	lsl8
    0273 9508      RET
asgncblk:
    0274 93AA      ST	R26,-Y
    0275 93BA      ST	R27,-Y
    0276 93EA      ST	R30,-Y
    0277 93FA      ST	R31,-Y
    0278 920A      ST	R0,-Y
    0279 81AF      LDD	R26,Y+7
    027A 85B8      LDD	R27,Y+8
    027B 81ED      LDD	R30,Y+5
    027C 81FE      LDD	R31,Y+6
    027D 3000      CPI	R16,0
    027E 0701      CPC	R16,R17
    027F F031      BEQ	0x0286
    0280 95C8      LPM
    0281 920D      ST	R0,X+
    0282 9631      ADIW	R30,1
    0283 5001      SUBI	R16,1
    0284 4010      SBCI	R17,0
    0285 CFF7      RJMP	0x027D
    0286 9009      LD	R0,Y+
    0287 91F9      LD	R31,Y+
    0288 91E9      LD	R30,Y+
    0289 91B9      LD	R27,Y+
    028A 91A9      LD	R26,Y+
    028B 9624      ADIW	R28,4
    028C 9508      RET

⌨️ 快捷键说明

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