📄 cscj_timer0.lis
字号:
.module cscj_timer0.C
.area vector(rom, abs)
.org 4
0004 0C942C00 jmp _int0
.area data(ram, con, rel)
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\重新整理的文件\控制类\超声波检测电路\程序\avr\cscj_timer0.C
0001 .dbsym e flag _flag c
.area text(rom, con, rel)
0000 .dbfile E:\重新整理的文件\控制类\超声波检测电路\程序\avr\cscj_timer0.C
0000 .dbfunc e delayus _delayus fV
0000 ; i -> R20,R21
0000 ; us -> R22,R23
.even
0000 _delayus::
0000 0E940000 xcall push_gset2
0004 B801 movw R22,R16
0006 .dbline -1
0006 .dbline 16
0006 ; #include <iom128v.h>
0006 ; #include <iom128.h>
0006 ; #include <macros.h>
0006 ; #define uchar unsigned char
0006 ; #define uint unsigned int
0006 ; #pragma interrupt_handler int0:2
0006 ;
0006 ; uchar flag=0;
0006 ; /*******************************************
0006 ; 函数名称: delayus
0006 ; 功 能: 延时指定微秒(8.31M晶振)
0006 ; 参 数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
0006 ; 返回值 : 无
0006 ; /********************************************/
0006 ; void delayus(uint us)
0006 ; {
0006 .dbline 18
0006 ; uint i;
0006 ; us=us*13/10; //13/10是在8.31MHz晶振下,通过反复实验得到的数值
0006 0DE0 ldi R16,13
0008 10E0 ldi R17,0
000A 9B01 movw R18,R22
000C 0E940000 xcall empy16s
0010 2AE0 ldi R18,10
0012 30E0 ldi R19,0
0014 0E940000 xcall div16u
0018 B801 movw R22,R16
001A .dbline 19
001A 4427 clr R20
001C 5527 clr R21
001E 02C0 xjmp L5
0020 L2:
0020 .dbline 19
0020 L3:
0020 .dbline 19
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L5:
0024 .dbline 19
0024 ; for( i=0;i<us;i++);
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D8F3 brlo L2
002A .dbline -2
002A .dbline 20
002A ; }
002A L1:
002A 0E940000 xcall pop_gset2
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r i 20 i
0030 .dbsym r us 22 i
0030 .dbend
0030 .dbfunc e delayms _delayms fV
0030 ; x -> R20,R21
0030 ; y -> R22,R23
0030 ; z -> R16,R17
.even
0030 _delayms::
0030 0E940000 xcall push_gset2
0034 .dbline -1
0034 .dbline 29
0034 ;
0034 ; /*******************************************
0034 ; 函数名称: delay()
0034 ; 功 能: 8.31MHz晶振下延时 z ms
0034 ; 参 数: z
0034 ; 返回值 : 无
0034 ; /********************************************/
0034 ; void delayms(uint z)
0034 ; {
0034 .dbline 31
0034 ; uint x,y;
0034 ; for(x=z;x>0;x--)
0034 A801 movw R20,R16
0036 0AC0 xjmp L10
0038 L7:
0038 .dbline 32
0038 61EA ldi R22,1185
003A 74E0 ldi R23,4
003C 02C0 xjmp L14
003E L11:
003E .dbline 32
003E L12:
003E .dbline 32
003E 6150 subi R22,1
0040 7040 sbci R23,0
0042 L14:
0042 .dbline 32
0042 6030 cpi R22,0
0044 6707 cpc R22,R23
0046 D9F7 brne L11
0048 X0:
0048 L8:
0048 .dbline 31
0048 4150 subi R20,1
004A 5040 sbci R21,0
004C L10:
004C .dbline 31
004C 4030 cpi R20,0
004E 4507 cpc R20,R21
0050 99F7 brne L7
0052 X1:
0052 .dbline -2
0052 .dbline 33
0052 ; for(y=1185;y>0;y--);
0052 ; }
0052 L6:
0052 0E940000 xcall pop_gset2
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r x 20 i
0058 .dbsym r y 22 i
0058 .dbsym r z 16 i
0058 .dbend
0058 .dbfunc e int0 _int0 fV
.even
0058 _int0::
0058 8A93 st -y,R24
005A 8FB7 in R24,0x3f
005C 8A93 st -y,R24
005E .dbline -1
005E .dbline 41
005E ; /*******************************************
005E ; 函数名称: int0()
005E ; 功 能: 进入中断后让发光二极管点亮
005E ; 检测是否收到超声波
005E ; 返回值 : 无
005E ; /********************************************/
005E ; void int0()
005E ; {
005E .dbline 42
005E ; flag=1;
005E 81E0 ldi R24,1
0060 80930000 sts _flag,R24
0064 .dbline -2
0064 .dbline 43
0064 ; }
0064 L15:
0064 8991 ld R24,y+
0066 8FBF out 0x3f,R24
0068 8991 ld R24,y+
006A .dbline 0 ; func end
006A 1895 reti
006C .dbend
006C .dbfunc e int0_init _int0_init fV
.even
006C _int0_init::
006C .dbline -1
006C .dbline 52
006C ;
006C ; /*******************************************
006C ; 函数名称: int0_init()
006C ; 功 能: 中断初始化
006C ; 参 数: 无
006C ; 返回值 : 无
006C ; /********************************************/
006C ; void int0_init()
006C ; {
006C .dbline 53
006C ; DDRD&=~BIT(0);
006C 8898 cbi 0x11,0
006E .dbline 54
006E ; PORTD|=BIT(0); //设置输出口上拉
006E 909A sbi 0x12,0
0070 .dbline 55
0070 ; EICRA=0X02;
0070 82E0 ldi R24,2
0072 80936A00 sts 106,R24
0076 .dbline 56
0076 ; EIMSK=0X01;
0076 81E0 ldi R24,1
0078 89BF out 0x39,R24
007A .dbline 57
007A ; SREG=BIT(7);
007A 80E8 ldi R24,128
007C 8FBF out 0x3f,R24
007E .dbline -2
007E .dbline 58
007E ; }
007E L16:
007E .dbline 0 ; func end
007E 0895 ret
0080 .dbend
0080 .dbfunc e timer0_init _timer0_init fV
.even
0080 _timer0_init::
0080 .dbline -1
0080 .dbline 67
0080 ;
0080 ; /*******************************************
0080 ; 函数名称: timer0_init()
0080 ; 功 能: 定时器0初始化 配置输出40khz占空比50%的方波
0080 ; 参 数: 无
0080 ; 返回值 : 无
0080 ; /********************************************/
0080 ; void timer0_init()
0080 ; {
0080 .dbline 68
0080 ; DDRB|=BIT(PB4);
0080 BC9A sbi 0x17,4
0082 .dbline 69
0082 ; ASSR&=~BIT(3);
0082 80B7 in R24,0x30
0084 877F andi R24,247
0086 80BF out 0x30,R24
0088 .dbline 70
0088 ; TCCR0=0X19;
0088 89E1 ldi R24,25
008A 83BF out 0x33,R24
008C .dbline 71
008C ; OCR0=0XC7;//经示波器测试产生39.92kHZ的正弦方波
008C 87EC ldi R24,199
008E 81BF out 0x31,R24
0090 .dbline -2
0090 .dbline 72
0090 ; }
0090 L17:
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbend
0092 .dbfunc e main _main fV
.even
0092 _main::
0092 .dbline -1
0092 .dbline 75
0092 ;
0092 ; void main()
0092 ; {
0092 .dbline 76
0092 ; DDRA=0XFF;
0092 8FEF ldi R24,255
0094 8ABB out 0x1a,R24
0096 .dbline 77
0096 ; PORTA=0X00;
0096 2224 clr R2
0098 2BBA out 0x1b,R2
009A .dbline 78
009A ; timer0_init();
009A F2DF xcall _timer0_init
009C .dbline 79
009C ; int0_init();
009C E7DF xcall _int0_init
009E 0EC0 xjmp L20
00A0 L19:
00A0 .dbline 81
00A0 ; while(1)
00A0 ; {
00A0 .dbline 82
00A0 ; if(flag==1)
00A0 80910000 lds R24,_flag
00A4 8130 cpi R24,1
00A6 51F4 brne L22
00A8 .dbline 83
00A8 ; {
00A8 .dbline 84
00A8 ; flag=0;
00A8 2224 clr R2
00AA 20920000 sts _flag,R2
00AE .dbline 85
00AE ; PORTA=0X55;
00AE 85E5 ldi R24,85
00B0 8BBB out 0x1b,R24
00B2 .dbline 86
00B2 ; delayms(500);
00B2 04EF ldi R16,500
00B4 11E0 ldi R17,1
00B6 BCDF xcall _delayms
00B8 .dbline 87
00B8 ; PORTA=0X00;
00B8 2224 clr R2
00BA 2BBA out 0x1b,R2
00BC .dbline 89
00BC ; // delayms(500);
00BC ; }
00BC L22:
00BC .dbline 90
00BC L20:
00BC .dbline 80
00BC F1CF xjmp L19
00BE X2:
00BE .dbline -2
00BE .dbline 91
00BE ; }
00BE ; }
00BE L18:
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -