📄 h2test.lst
字号:
__start:
__text_start:
039C E5CF LDI R28,0x5F
039D E0D4 LDI R29,4
039E BFCD OUT 0x3D,R28
039F BFDE OUT 0x3E,R29
03A0 51C0 SUBI R28,0x10
03A1 40D0 SBCI R29,0
03A2 EA0A LDI R16,0xAA
03A3 8308 STD Y+0,R16
03A4 2400 CLR R0
03A5 E6E0 LDI R30,0x60
03A6 E0F0 LDI R31,0
03A7 E010 LDI R17,0
03A8 38E3 CPI R30,0x83
03A9 07F1 CPC R31,R17
03AA F011 BEQ 0x03AD
03AB 9201 ST R0,Z+
03AC CFFB RJMP 0x03A8
03AD 8300 STD Z+0,R16
03AE E3E8 LDI R30,0x38
03AF E0F7 LDI R31,7
03B0 E6A0 LDI R26,0x60
03B1 E0B0 LDI R27,0
03B2 E017 LDI R17,7
03B3 33E8 CPI R30,0x38
03B4 07F1 CPC R31,R17
03B5 F021 BEQ 0x03BA
03B6 95C8 LPM
03B7 9631 ADIW R30,1
03B8 920D ST R0,X+
03B9 CFF9 RJMP 0x03B3
03BA 940E048C CALL _main
_exit:
03BC CFFF RJMP _exit
_show_time:
sec --> R20
min --> R22
hour --> R10
03BD 940E0EC6 CALL push_gset3
03BF 9721 SBIW R28,1
FILE: D:\zhangyu\H2test\program\main.c
(0001) /************************************************************
(0002) FileName: main.c
(0003) Author: Version : Date:
(0004) Description: // 模块描述
(0005) Version: // 版本信息
(0006) Function List: // 主要函数及其功能
(0007) 1. -------
(0008) History: // 历史修改记录
(0009) <author> <time> <version > <desc>
(0010) David 96/10/12 1.0 build this moudle
(0011) ***********************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) #include "main.h"
(0015) #include "initial_mcu.h"
(0016) #include "232.h"
(0017) #include "lcd.h"
(0018) #include "key.h"
(0019) #include "6675.h"
(0020) #include "1302.h"
(0021) #include "7135.h"
(0022)
(0023) #define ICP PORTD&0x40
(0024) //全局变量
(0025) unsigned char entercount,leftcount,rightcount;
(0026) unsigned char position1302,hh,mm,positioncanbi,canbianjian;
(0027) unsigned int time_array[6],canbi_array[5];
(0028)
(0029) unsigned char endflag;
(0030) unsigned int ovcounter,pulse;
(0031)
(0032) void show_time(void)
(0033) {
(0034) unsigned char hour,min,sec;
(0035)
(0036) hour=pDS1302_Read(mDS1302_HOUR_Reg); //时
03C0 E804 LDI R16,0x84
03C1 940E07ED CALL _pDS1302_Read
03C3 2EA0 MOV R10,R16
(0037) min=pDS1302_Read(mDS1302_MIN_Reg); //分
03C4 E802 LDI R16,0x82
03C5 940E07ED CALL _pDS1302_Read
03C7 2F60 MOV R22,R16
(0038) sec=pDS1302_Read(mDS1302_SEC_Reg); //秒
03C8 E800 LDI R16,0x80
03C9 940E07ED CALL _pDS1302_Read
03CB 2F40 MOV R20,R16
(0039) time_array[0]=hour>>4;
03CC 2C2A MOV R2,R10
03CD 2433 CLR R3
03CE 9435 ASR R3
03CF 9427 ROR R2
03D0 9435 ASR R3
03D1 9427 ROR R2
03D2 9435 ASR R3
03D3 9427 ROR R2
03D4 9435 ASR R3
03D5 9427 ROR R2
03D6 92300070 STS time_array+1,R3
03D8 9220006F STS time_array,R2
(0040) time_array[1]=hour&0x0f;
03DA 2D8A MOV R24,R10
03DB 2799 CLR R25
03DC 708F ANDI R24,0xF
03DD 7090 ANDI R25,0
03DE 93900072 STS time_array+3,R25
03E0 93800071 STS time_array+2,R24
(0041) time_array[2]=min>>4;
03E2 2E26 MOV R2,R22
03E3 2433 CLR R3
03E4 9435 ASR R3
03E5 9427 ROR R2
03E6 9435 ASR R3
03E7 9427 ROR R2
03E8 9435 ASR R3
03E9 9427 ROR R2
03EA 9435 ASR R3
03EB 9427 ROR R2
03EC 92300074 STS arab_3,R3
03EE 92200073 STS 0x73,R2
(0042) time_array[3]=min&0x0f;
03F0 2F86 MOV R24,R22
03F1 2799 CLR R25
03F2 708F ANDI R24,0xF
03F3 7090 ANDI R25,0
03F4 93900076 STS arab_3+2,R25
03F6 93800075 STS arab_3+1,R24
(0043) time_array[4]=sec>>4;
03F8 2E24 MOV R2,R20
03F9 2433 CLR R3
03FA 9435 ASR R3
03FB 9427 ROR R2
03FC 9435 ASR R3
03FD 9427 ROR R2
03FE 9435 ASR R3
03FF 9427 ROR R2
0400 9435 ASR R3
0401 9427 ROR R2
0402 92300078 STS 0x78,R3
0404 92200077 STS arab_3+3,R2
(0044) time_array[5]=sec&0x0f;
0406 2F84 MOV R24,R20
0407 2799 CLR R25
0408 708F ANDI R24,0xF
0409 7090 ANDI R25,0
040A 9390007A STS 0x7A,R25
040C 93800079 STS 0x79,R24
(0045) Draw_NtoArab(0x00,0x28,time_array[0]);
040E 9020006F LDS R2,time_array
0410 90300070 LDS R3,time_array+1
0412 8228 STD Y+0,R2
0413 E228 LDI R18,0x28
0414 2700 CLR R16
0415 940E05BF CALL _Draw_NtoArab
(0046) Draw_NtoArab(0x00,0x30,time_array[1]);
0417 90200071 LDS R2,time_array+2
0419 90300072 LDS R3,time_array+3
041B 8228 STD Y+0,R2
041C E320 LDI R18,0x30
041D 2700 CLR R16
041E 940E05BF CALL _Draw_NtoArab
(0047) Draw_NtoArab(0x00,0x40,time_array[2]);
0420 90200073 LDS R2,0x73
0422 90300074 LDS R3,arab_3
0424 8228 STD Y+0,R2
0425 E420 LDI R18,0x40
0426 2700 CLR R16
0427 940E05BF CALL _Draw_NtoArab
(0048) Draw_NtoArab(0x00,0x48,time_array[3]);
0429 90200075 LDS R2,arab_3+1
042B 90300076 LDS R3,arab_3+2
042D 8228 STD Y+0,R2
042E E428 LDI R18,0x48
042F 2700 CLR R16
0430 940E05BF CALL _Draw_NtoArab
(0049) Draw_NtoArab(0x00,0x58,time_array[4]);
0432 90200077 LDS R2,arab_3+3
0434 90300078 LDS R3,0x78
0436 8228 STD Y+0,R2
0437 E528 LDI R18,0x58
0438 2700 CLR R16
0439 940E05BF CALL _Draw_NtoArab
(0050) Draw_NtoArab(0x00,0x60,time_array[5]);
043B 90200079 LDS R2,0x79
043D 9030007A LDS R3,0x7A
043F 8228 STD Y+0,R2
0440 E620 LDI R18,0x60
0441 2700 CLR R16
0442 940E05BF CALL _Draw_NtoArab
0444 9621 ADIW R28,1
0445 940E0EB9 CALL pop_gset3
0447 9508 RET
_show_canbi:
0448 9721 SBIW R28,1
(0051) }
(0052)
(0053) void show_canbi(void)
(0054) {
(0055) Draw_NtoArab(0x04,0x40,canbi_array[1]);
0449 90200067 LDS R2,canbi_array+2
044B 90300068 LDS R3,canbi_array+3
044D 8228 STD Y+0,R2
044E E420 LDI R18,0x40
044F E004 LDI R16,4
0450 940E05BF CALL _Draw_NtoArab
(0056) Draw_NtoArab(0x04,0x48,canbi_array[2]);
0452 90200069 LDS R2,0x69
0454 9030006A LDS R3,0x6A
0456 8228 STD Y+0,R2
0457 E428 LDI R18,0x48
0458 E004 LDI R16,4
0459 940E05BF CALL _Draw_NtoArab
(0057) Draw_NtoArab(0x04,0x58,canbi_array[3]);
045B 9020006B LDS R2,0x6B
045D 9030006C LDS R3,0x6C
045F 8228 STD Y+0,R2
0460 E528 LDI R18,0x58
0461 E004 LDI R16,4
0462 940E05BF CALL _Draw_NtoArab
(0058) Draw_NtoArab(0x04,0x60,canbi_array[4]);
0464 9020006D LDS R2,0x6D
0466 9030006E LDS R3,0x6E
0468 8228 STD Y+0,R2
0469 E620 LDI R18,0x60
046A E004 LDI R16,4
046B 940E05BF CALL _Draw_NtoArab
046D 9621 ADIW R28,1
046E 9508 RET
(0059) }
(0060)
(0061) void data_init(void)
(0062) {
(0063) unsigned char i;
(0064) entercount=0;
_data_init:
i --> R16
046F 2422 CLR R2
0470 92200082 STS entercount,R2
(0065) leftcount=0;
0472 92200081 STS leftcount,R2
(0066) rightcount=0;
0474 92200080 STS rightcount,R2
(0067) position1302=0;
0476 9220007F STS position1302,R2
(0068) positioncanbi=0x02;
0478 E082 LDI R24,2
0479 9380007C STS positioncanbi,R24
(0069) for(i=1;i<5;i++)
047B E001 LDI R16,1
047C C00C RJMP 0x0489
(0070) canbi_array[i]=0x00;
047D E082 LDI R24,2
047E 9F80 MUL R24,R16
047F 01F0 MOVW R30,R0
0480 E685 LDI R24,0x65
0481 E090 LDI R25,0
0482 0FE8 ADD R30,R24
0483 1FF9 ADC R31,R25
0484 2422 CLR R2
0485 2433 CLR R3
0486 8231 STD Z+1,R3
0487 8220 STD Z+0,R2
0488 9503 INC R16
0489 3005 CPI R16,5
048A F390 BCS 0x047D
048B 9508 RET
(0071) }
(0072)
(0073) void main(void)
(0074) {
(0075) Initial_MCU(); //初始化mcu
_main:
048C 940E04C8 CALL _Initial_MCU
(0076) Initial_LCD(); //初始化LCD
048E 940E0518 CALL _Initial_LCD
(0077) Com0_Init(); //初始化串口
0490 940E0796 CALL _Com0_Init
(0078) pDS1302_Init(); //初始化1302
0492 940E083E CALL _pDS1302_Init
(0079) data_init();
0494 DFDA RCALL _data_init
(0080) Clear_DDRAM(0x00,0x07); //清除lcd的所有显示内容
0495 E027 LDI R18,7
0496 2700 CLR R16
0497 940E0537 CALL _Clear_DDRAM
(0081) Draw_Menu_Interface(); //绘制主菜单
0499 940E06EB CALL _Draw_Menu_Interface
049B C00B RJMP 0x04A7
(0082) while(1)
(0083) {
(0084) Uart_Transmit('a');
049C E601 LDI R16,0x61
049D 940E07A4 CALL _Uart_Transmit
(0085) show_time();
049F DF1D RCALL _show_time
(0086) show_temperature();
04A0 940E097B CALL _show_temperature
(0087) show_canbi();
04A2 DFA5 RCALL _show_canbi
(0088) checkkey();
04A3 940E0C4F CALL _checkkey
(0089) display7135();
04A5 940E0DEF CALL _display7135
04A7 CFF4 RJMP 0x049C
04A8 9508 RET
_timer1_capt_isr:
04A9 922A ST R2,-Y
04AA 923A ST R3,-Y
04AB 938A ST R24,-Y
04AC B62F IN R2,0x3F
04AD 922A ST R2,-Y
(0090) }
(0091) }
(0092)
(0093)
(0094) //测7135的busy信号所需的定时器捕获中断函数
(0095) #pragma interrupt_handler timer1_capt_isr:6
(0096) void timer1_capt_isr(void)
(0097) {
(0098) if(ICP)
04AE 9B96 SBIS 0x12,6
04AF C007 RJMP 0x04B7
(0099) {
(0100) endflag=0;
04B0 2422 CLR R2
04B1 92200064 STS endflag,R2
(0101) TCCR1B&=0xbf; //下降沿捕获
04B3 B58E IN R24,0x2E
04B4 7B8F ANDI R24,0xBF
04B5 BD8E OUT 0x2E,R24
(0102) }
04B6 C00B RJMP 0x04C2
(0103) else
(0104) {
(0105) pulse=ICR1;
04B7 B426 IN R2,0x26
04B8 B437 IN R3,0x27
04B9 92300061 STS pulse+1,R3
04BB 92200060 STS pulse,R2
(0106) endflag=1;
04BD E081 LDI R24,1
04BE 93800064 STS endflag,R24
(0107) TCCR1B=0x00; //stop timer1
04C0 2422 CLR R2
04C1 BC2E OUT 0x2E,R2
(0108) }
04C2 9029 LD R2,Y+
04C3 BE2F OUT 0x3F,R2
04C4 9189 LD R24,Y+
04C5 9039 LD R3,Y+
04C6 9029 LD R2,Y+
04C7 9518 RETI
FILE: D:\zhangyu\H2test\program\initial_mcu.c
(0001) /*-------------------------------------------------------------*-
(0002) initial_mcu.h(v1.00)
(0003) -----------------------------------------------------------------
(0004) 初始化MCU的代码
(0005) -*--------------------------------------------------------------*/
(0006) #include <iom16v.h>
(0007) #include <macros.h>
(0008) #include "initial_mcu.h"
(0009)
(0010) void Initial_MCU(void)
(0011) {
(0012) CLI();
_Initial_MCU:
04C8 94F8 BCLR 7
(0013) DDRA = 0xff;
04C9 EF8F LDI R24,0xFF
04CA BB8A OUT 0x1A,R24
(0014) PORTA = 0xff;
04CB BB8B OUT 0x1B,R24
(0015) DDRB = 0x03;
04CC E083 LDI R24,3
04CD BB87 OUT 0x17,R24
(0016) PORTB = 0xff;
04CE EF8F LDI R24,0xFF
04CF BB88 OUT 0x18,R24
(0017) DDRC = 0xc3;
04D0 EC83 LDI R24,0xC3
04D1 BB84 OUT 0x14,R24
(0018) PORTC = 0xff;
04D2 EF8F LDI R24,0xFF
04D3 BB85 OUT 0x15,R24
(0019) DDRD = 0xae;
04D4 EA8E LDI R24,0xAE
04D5 BB81 OUT 0x11,R24
(0020) PORTD = 0xff;
04D6 EF8F LDI R24,0xFF
04D7 BB82 OUT 0x12,R24
04D8 9508 RET
FILE: D:\zhangyu\H2test\program\lcd.c
(0001) /************************************************************
(0002) FileName: lcd.c
(0003) Description: 液晶显示模块初始化lcd,向lcd发送命令字和数据,显示指定大小的图像,清屏。
(0004) Function List:
(0005) 1.Send_Byte()
(0006) 功能:向lcd的控制芯片发送数据
(0007)
(0008) 2.Send_Commnad()
(0009) 功能:向lcd的控制芯片发送命令字
(0010)
(0011) 3.Gen_Column_MSB()
(0012) Gen_Column_MSB()
(0013) 功能:生成设置高4位和低4位列地址的命令字
(0014)
(0015) 4.Initial_LCD()
(0016) 功能:初始化lcd
(0017)
(0018) 5.Gen_Page()
(0019) 功能:生成设置页地址的命令字
(0020)
(0021)
(0022) 6.Clear_DDRAM()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -