📄 main.lis
字号:
.module main.c
.area data(ram, con, rel)
0000 _KB_HitFlag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0001 .dbsym e KB_HitFlag _KB_HitFlag c
0001 _KB_UpFlag::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0002 .dbsym e KB_UpFlag _KB_UpFlag c
0002 _KB_Buf::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0003 .dbsym e KB_Buf _KB_Buf c
.area text(rom, con, rel)
0000 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0000 .dbfunc e init_devices _init_devices fV
.even
0000 _init_devices::
0000 .dbline -1
0000 .dbline 22
0000 ; /******************************************************************************
0000 ; //程序功能解码PC键盘,然后把键盘码值通过串口发送到串口显示
0000 ; //晶振频率:16 MHZ
0000 ; //单片机类型:maget 16
0000 ; //编写日期:2009年3月13日 谢巍
0000 ; *******************************************************************************/
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define IRsignal (PINA&BIT(0)) //检测一个端口电平输入情况就要这样定义了
0000 ; #define DIR_I DDRA&=~BIT(0)
0000 ; #define DIR_O DDRA|=BIT(0)
0000 ;
0000 ; //定义全局变量
0000 ; unsigned char KB_HitFlag = 0; //按键标志
0000 ; unsigned char KB_UpFlag = 0; //抬起标志
0000 ; unsigned char KB_Buf=0; //键盘缓冲区
0000 ;
0000 ; //外部中断初始化函数
0000 ; void init_devices(void)
0000 ; {
0000 .dbline 23
0000 ; MCUCR = 0x02; //INT1 的下降沿产生异步中断请求
0000 82E0 ldi R24,2
0002 85BF out 0x35,R24
0004 .dbline 24
0004 ; GICR = 0x40; //INT1中断使能
0004 80E4 ldi R24,64
0006 8BBF out 0x3b,R24
0008 .dbline 25
0008 ; TIMSK = 0x00; //timer interrupt sources
0008 2224 clr R2
000A 29BE out 0x39,R2
000C .dbline 26
000C ; SEI(); //打开外部所有中断 两种表达方式是相同的
000C 7894 sei
000E .dbline -2
000E .dbline 27
000E ; }
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
.area vector(rom, abs)
.org 4
0004 0C940800 jmp _int1_isr
.area text(rom, con, rel)
0010 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
.area data(ram, con, rel)
0003 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0003 L3:
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0004 L4:
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
.area text(rom, con, rel)
0010 .dbfile D:\AVRchengcu\PS2--AVR\ps2\main.c
0010 .dbfunc e int1_isr _int1_isr fV
0010 .dbsym s k L4 c
0010 .dbsym s cnt L3 c
.even
0010 _int1_isr::
0010 0E940000 xcall push_lset
0014 .dbline -1
0014 .dbline 32
0014 ;
0014 ; //外部中断1中断服务函数
0014 ; #pragma interrupt_handler int1_isr:2
0014 ; void int1_isr(void)
0014 ; {
0014 .dbline 35
0014 ; static unsigned char cnt = 0;
0014 ; static unsigned char k=0;
0014 ; if ( cnt == 0 ) //起始位
0014 20900300 lds R2,L3
0018 2220 tst R2
001A 09F4 brne L5
001C .dbline 36
001C ; {;
001C .dbline 36
001C .dbline 37
001C ; }
001C 12C0 xjmp L6
001E L5:
001E .dbline 38
001E ; else if ( cnt <= 8 ) //数据位
001E 88E0 ldi R24,8
0020 20900300 lds R2,L3
0024 8215 cp R24,R2
0026 68F0 brlo L7
0028 .dbline 39
0028 ; {
0028 .dbline 40
0028 ; k >>= 1;
0028 20900400 lds R2,L4
002C 2694 lsr R2
002E 20920400 sts L4,R2
0032 .dbline 41
0032 ; if (IRsignal==BIT(0))
0032 89B3 in R24,0x19
0034 8170 andi R24,1
0036 8130 cpi R24,1
0038 21F4 brne L8
003A .dbline 42
003A ; k|= 0x80;
003A 822D mov R24,R2
003C 8068 ori R24,128
003E 80930400 sts L4,R24
0042 .dbline 43
0042 ; }
0042 L7:
0042 .dbline 45
0042 ; else //校验位和停止位
0042 ; {;
0042 .dbline 45
0042 .dbline 46
0042 ; }
0042 L8:
0042 L6:
0042 .dbline 47
0042 ; cnt++;
0042 80910300 lds R24,L3
0046 8F5F subi R24,255 ; addi 1
0048 80930300 sts L3,R24
004C .dbline 48
004C ; if ( cnt >= 11 ) //一帧数据接收完毕
004C 8B30 cpi R24,11
004E 10F1 brlo L11
0050 .dbline 49
0050 ; {
0050 .dbline 50
0050 ; cnt = 0;
0050 2224 clr R2
0052 20920300 sts L3,R2
0056 .dbline 51
0056 ; if ( k == 0xF0 ) //抬起标志
0056 80910400 lds R24,L4
005A 803F cpi R24,240
005C 21F4 brne L13
005E .dbline 52
005E ; {
005E .dbline 53
005E ; KB_UpFlag = 1;
005E 81E0 ldi R24,1
0060 80930100 sts _KB_UpFlag,R24
0064 .dbline 54
0064 ; }
0064 17C0 xjmp L14
0066 L13:
0066 .dbline 56
0066 ; else
0066 ; {
0066 .dbline 57
0066 ; if ( KB_UpFlag )
0066 20900100 lds R2,_KB_UpFlag
006A 2220 tst R2
006C 21F0 breq L15
006E .dbline 58
006E ; {
006E .dbline 59
006E ; KB_UpFlag = 0;
006E 2224 clr R2
0070 20920100 sts _KB_UpFlag,R2
0074 .dbline 60
0074 ; }
0074 0FC0 xjmp L16
0076 L15:
0076 .dbline 62
0076 ; else
0076 ; {
0076 .dbline 63
0076 ; KB_Buf = k;
0076 20900400 lds R2,L4
007A 20920200 sts _KB_Buf,R2
007E .dbline 64
007E ; k=0;
007E 2224 clr R2
0080 20920400 sts L4,R2
0084 .dbline 65
0084 ; KB_HitFlag = 1;
0084 81E0 ldi R24,1
0086 80930000 sts _KB_HitFlag,R24
008A .dbline 67
008A ;
008A ; put_c(KB_Buf);
008A 00910200 lds R16,_KB_Buf
008E 1127 clr R17
0090 0E940000 xcall _put_c
0094 .dbline 68
0094 ; }
0094 L16:
0094 .dbline 69
0094 ; }
0094 L14:
0094 .dbline 70
0094 L11:
0094 .dbline -2
0094 .dbline 71
0094 ; }
0094 ; }
0094 L2:
0094 0E940000 xcall pop_lset
0098 .dbline 0 ; func end
0098 1895 reti
009A .dbend
009A .dbfunc e main _main fV
.even
009A _main::
009A .dbline -1
009A .dbline 74
009A ;
009A ; void main()
009A ; {
009A .dbline 75
009A ; init_devices();
009A B2DF xcall _init_devices
009C .dbline 76
009C ; init_USART();
009C 0E940000 xcall _init_USART
00A0 .dbline 77
00A0 ; KB_Buf=0;
00A0 2224 clr R2
00A2 20920200 sts _KB_Buf,R2
00A6 L18:
00A6 .dbline 79
00A6 .dbline 80
00A6 .dbline 81
00A6 L19:
00A6 .dbline 78
00A6 FFCF xjmp L18
00A8 X0:
00A8 .dbline -2
00A8 .dbline 83
00A8 ; while(1)
00A8 ; {
00A8 ; ;
00A8 ; }
00A8 ;
00A8 ; }
00A8 L17:
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -