📄 second.lis
字号:
.module second.c
.area lit(rom, con, rel)
0000 _seg_table::
0000 3031 .byte 48,49
0002 3233 .byte 50,51
0004 3435 .byte 52,53
0006 3637 .byte 54,55
0008 3839 .byte 56,57
000A .dbfile D:\mega16学习板资料\例程\m16\1602/1602.h
000A .dbsym e seg_table _seg_table A[10:10]kc
.area text(rom, con, rel)
0000 .dbfile D:\mega16学习板资料\例程\m16\1602/1602.h
0000 .dbfunc e lcd_init _lcd_init fV
.even
0000 _lcd_init::
0000 .dbline -1
0000 .dbline 37
0000 ; //ICC-AVR application builder : 2006-12-22 20:34:51
0000 ; // Target : M8
0000 ; // Crystal: 6.0000Mhz
0000 ; //1602占用了PB口作为数据口,PA6,PA5,PA4分别是RS,WR,E
0000 ; //按纽采用循环检测方式工作,不采用中断方式.
0000 ;
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "1602.h"
0000 ; unsigned char led_buff[]="qian ru shi LM! ";
0000 ; unsigned char str1[]="www.ourembed.com";
0000 ;
0000 ;
0000 ; void timer1_init(void);
0000 ; void init_devices(void);
0000 ; unsigned char KeyPress(void);
0000 ; void delay_ms(unsigned int time);
0000 ; void StartCount(void);
0000 ; void StopCount(void);
0000 ; void Clear(void);
0000 ; unsigned int hour=0,minute=0,second=0,ms=0;
0000 ; unsigned char c_next=0,choose=0;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 ; PORTB = 0xFF;
0000 ; DDRB = 0xFF;
0000 ; PORTC = 0xFF; //m103 output only
0000 ; DDRC = 0xFF;
0000 ; PORTD = 0xFF;
0000 ; DDRD = 0xFF;
0000 ; }
0000 ;
0000 ; //TIMER1 initialisation - prescale:8
0000 ; // WGM: 0) Normal, TOP=0xFFFF
0000 ; // desired value: 1mSec
0000 .dbline 38
0000 ; // actual value: 1.000mSec (0.0%)
0000 04E6 ldi R16,100
0002 10E0 ldi R17,0
0004 2BD0 xcall _delay_nms
0006 .dbline 39
0006 ; void timer1_init(void)
0006 2227 clr R18
0008 08E3 ldi R16,56
000A 37D0 xcall _lcd_write_command
000C .dbline 40
000C ; {
000C 04E1 ldi R16,20
000E 10E0 ldi R17,0
0010 25D0 xcall _delay_nms
0012 .dbline 41
0012 ; TCCR1B = 0x00; //stop
0012 2227 clr R18
0014 08E3 ldi R16,56
0016 31D0 xcall _lcd_write_command
0018 .dbline 42
0018 ; TCNT1H = 0x63; //setup
0018 04E1 ldi R16,20
001A 10E0 ldi R17,0
001C 1FD0 xcall _delay_nms
001E .dbline 43
001E ; TCNT1L = 0xc0;
001E 2227 clr R18
0020 08E3 ldi R16,56
0022 2BD0 xcall _lcd_write_command
0024 .dbline 44
0024 ; OCR1AH = 0x17;
0024 04E1 ldi R16,20
0026 10E0 ldi R17,0
0028 19D0 xcall _delay_nms
002A .dbline 46
002A ; OCR1AL = 0x70;
002A ; OCR1BH = 0x17;
002A 21E0 ldi R18,1
002C 08E3 ldi R16,56
002E 25D0 xcall _lcd_write_command
0030 .dbline 47
0030 ; OCR1BL = 0x70;
0030 21E0 ldi R18,1
0032 08E0 ldi R16,8
0034 22D0 xcall _lcd_write_command
0036 .dbline 48
0036 ; ICR1H = 0x17;
0036 21E0 ldi R18,1
0038 01E0 ldi R16,1
003A 1FD0 xcall _lcd_write_command
003C .dbline 49
003C ; ICR1L = 0x70;
003C 21E0 ldi R18,1
003E 06E0 ldi R16,6
0040 1CD0 xcall _lcd_write_command
0042 .dbline 50
0042 ; TCCR1A = 0x00;
0042 21E0 ldi R18,1
0044 0CE0 ldi R16,12
0046 .dbline -2
0046 .dbline 51
0046 ; TCCR1B = 0x00; //start Timer
0046 L1:
0046 .dbline 0 ; func end
0046 19C0 xjmp _lcd_write_command
0048 .dbend
0048 .dbfunc e delay_1ms _delay_1ms fV
0048 ; i -> R16,R17
.even
0048 _delay_1ms::
0048 .dbline -1
0048 .dbline 56
0048 ; }
0048 ;
0048 ; #pragma interrupt_handler timer1_ovf_isr:9
0048 ; void timer1_ovf_isr(void)
0048 ; {
0048 .dbline 58
0048 0027 clr R16
004A 1127 clr R17
004C 02C0 xjmp L6
004E L3:
004E .dbline 58
004E L4:
004E .dbline 58
004E 0F5F subi R16,255 ; offset = 1
0050 1F4F sbci R17,255
0052 L6:
0052 .dbline 58
0052 ; //TIMER1 has overflowed
0052 ; TCNT1H = 0x63; //reload counter high value
0052 0034 cpi R16,64
0054 E6E0 ldi R30,6
0056 1E07 cpc R17,R30
0058 D0F3 brlo L3
005A .dbline -2
005A .dbline 59
005A ; TCNT1L = 0xc0; //reload counter low value
005A L2:
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r i 16 i
005C .dbend
005C .dbfunc e delay_nms _delay_nms fV
005C ; i -> R20,R21
005C ; n -> R22,R23
.even
005C _delay_nms::
005C 0E940000 xcall push_gset2
0060 B801 movw R22,R16
0062 .dbline -1
0062 .dbline 63
0062 ; }
0062 ;
0062 ; //call this routine to initialise all peripherals
0062 ; void init_devices(void)
0062 .dbline 65
0062 4427 clr R20
0064 5527 clr R21
0066 03C0 xjmp L11
0068 L8:
0068 .dbline 65
0068 EFDF xcall _delay_1ms
006A L9:
006A .dbline 65
006A 4F5F subi R20,255 ; offset = 1
006C 5F4F sbci R21,255
006E L11:
006E .dbline 65
006E ; {
006E ; //stop errant interrupts until set up
006E 4617 cp R20,R22
0070 5707 cpc R21,R23
0072 D0F3 brlo L8
0074 .dbline -2
0074 .dbline 66
0074 ; CLI(); //disable all interrupts
0074 L7:
0074 0E940000 xcall pop_gset2
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r i 20 i
007A .dbsym r n 22 i
007A .dbend
007A .dbfunc e lcd_write_command _lcd_write_command fV
007A ; wait_en -> R22
007A ; command -> R20
.even
007A _lcd_write_command::
007A 0E940000 xcall push_gset2
007E 622F mov R22,R18
0080 402F mov R20,R16
0082 .dbline -1
0082 .dbline 70
0082 ; port_init();
0082 ; timer1_init();
0082 ;
0082 ; MCUCR = 0x0A;
0082 .dbline 71
0082 ; GICR = 0x00;
0082 6623 tst R22
0084 09F0 breq L13
0086 .dbline 71
0086 45D0 xcall _wait_enable
0088 L13:
0088 .dbline 72
0088 ; TIMSK = 0x04; //timer interrupt sources
0088 DE98 cbi 0x1b,6
008A .dbline 73
008A ; SEI(); //re-enable interrupts
008A DD98 cbi 0x1b,5
008C .dbline 74
008C ; //all peripherals are now initialised
008C DC98 cbi 0x1b,4
008E .dbline 75
008E ; }
008E 0000 nop
0090 .dbline 76
0090 ;
0090 DC9A sbi 0x1b,4
0092 .dbline 77
0092 ; //
0092 48BB out 0x18,R20
0094 .dbline 78
0094 ; void main(void)
0094 DC98 cbi 0x1b,4
0096 .dbline -2
0096 .dbline 79
0096 ; {
0096 L12:
0096 0E940000 xcall pop_gset2
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r wait_en 22 c
009C .dbsym r command 20 c
009C .dbend
009C .dbfunc e display_a_char _display_a_char fV
009C ; position_tem -> R22
009C ; char_data -> R20
009C ; position -> R10
.even
009C _display_a_char::
009C 0E940000 xcall push_gset3
00A0 422F mov R20,R18
00A2 A02E mov R10,R16
00A4 .dbline -1
00A4 .dbline 84
00A4 ; init_devices();
00A4 ; lcd_init();
00A4 ; //insert your functional code here...
00A4 ; display_a_string(0,led_buff);
00A4 ; display_a_string(1,str1);
00A4 .dbline 86
00A4 ;
00A4 ;
00A4 8A2D mov R24,R10
00A6 8031 cpi R24,16
00A8 18F0 brlo L16
00AA .dbline 87
00AA ; }
00AA 682F mov R22,R24
00AC 6055 subi R22,80 ; addi 176
00AE 02C0 xjmp L17
00B0 L16:
00B0 .dbline 89
00B0 ;
00B0 ; //延时
00B0 6A2D mov R22,R10
00B2 6058 subi R22,128 ; addi 128
00B4 L17:
00B4 .dbline 90
00B4 ; void delay_ms(unsigned int time)
00B4 21E0 ldi R18,1
00B6 062F mov R16,R22
00B8 E0DF xcall _lcd_write_command
00BA .dbline 91
00BA ; { unsigned int i,j;
00BA 042F mov R16,R20
00BC 1CD0 xcall _lcd_write_data
00BE .dbline -2
00BE .dbline 92
00BE ;
00BE L15:
00BE 0E940000 xcall pop_gset3
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbsym r position_tem 22 c
00C4 .dbsym r char_data 20 c
00C4 .dbsym r position 10 c
00C4 .dbend
00C4 .dbfunc e display_a_string _display_a_string fV
00C4 ; col_tem -> R20
00C4 ; i -> R22
00C4 ; ptr -> R10,R11
00C4 ; col -> R20
.even
00C4 _display_a_string::
00C4 0E940000 xcall push_gset3
00C8 5901 movw R10,R18
00CA 402F mov R20,R16
00CC .dbline -1
00CC .dbline 97
00CC ; for(j=0;j<time;j++)
00CC ; { for(i=0;i<1000;i++)
00CC ; time=time;
00CC ; }
00CC ; }
00CC .dbline 99
00CC ;
00CC ; //键盘
00CC 842F mov R24,R20
00CE 8F70 andi R24,#0x0F
00D0 8295 swap R24
00D2 482F mov R20,R24
00D4 .dbline 100
00D4 ;
00D4 6627 clr R22
00D6 0AC0 xjmp L22
00D8 L19:
00D8 .dbline 101
00D8 E62F mov R30,R22
00DA FF27 clr R31
00DC EA0D add R30,R10
00DE FB1D adc R31,R11
00E0 2081 ldd R18,z+0
00E2 242E mov R2,R20
00E4 4F5F subi R20,255 ; addi 1
00E6 022D mov R16,R2
00E8 D9DF xcall _display_a_char
00EA L20:
00EA .dbline 100
00EA 6395 inc R22
00EC L22:
00EC .dbline 100
00EC 6031 cpi R22,16
00EE A0F3 brlo L19
00F0 .dbline -2
00F0 .dbline 102
00F0 ;
00F0 ;
00F0 L18:
00F0 0E940000 xcall pop_gset3
00F4 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -