📄 cscj_timer1.lis
字号:
0030 .dbline 80
0030 60EF ldi R22,2800
0032 7AE0 ldi R23,10
0034 02C0 xjmp L18
0036 L15:
0036 .dbline 80
0036 L16:
0036 .dbline 80
0036 6150 subi R22,1
0038 7040 sbci R23,0
003A L18:
003A .dbline 80
003A 6030 cpi R22,0
003C 6707 cpc R22,R23
003E D9F7 brne L15
0040 X2:
0040 L12:
0040 .dbline 79
0040 4150 subi R20,1
0042 5040 sbci R21,0
0044 L14:
0044 .dbline 79
0044 4030 cpi R20,0
0046 4507 cpc R20,R21
0048 99F7 brne L11
004A X3:
004A .dbline -2
004A L10:
004A 0E940000 xcall pop_gset2
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbsym r i 20 i
0050 .dbsym r j 22 i
0050 .dbsym r t 16 i
0050 .dbend
0050 .dbfunc e Sendbyte _Sendbyte fV
0050 ; i -> R20
0050 ; data -> R22
.even
0050 _Sendbyte::
0050 0E940000 xcall push_gset2
0054 602F mov R22,R16
0056 .dbline -1
0056 .dbline 91
0056 ; }
0056 ;
0056 ; /*******************************************
0056 ; * 函数名称: timer1_init()
0056 ; * 函数功能: 定时器1初始化 用于测量距离
0056 ; * 入口参数: 无
0056 ; * 出口参数: 无
0056 ; /********************************************/
0056 ; void timer1_init()
0056 ; {
0056 ; TCCR1B = 0X01;// 设置分频数为1,16MHZ
0056 ; TCNT1H = 0xFF;// 设置计数初值, 每10微秒进入定时器中断处理子函数 使time_counter加1
0056 .dbline 92
0056 ; TCNT1L = 0x60;//
0056 4427 clr R20
0058 .dbline 93
0058 ; TIMSK &= ~BIT(2);//关闭溢出中断
0058 .dbline 94
0058 ; }
0058 08E0 ldi R16,8
005A 10E0 ldi R17,0
005C D1DF xcall _delay_us
005E .dbline 95
005E ;
005E 17C0 xjmp L23
0060 L20:
0060 .dbline 96
0060 ; /**************************************************************
0060 .dbline 97
0060 ; * 函数名称:calculate_distance()
0060 67FF sbrs R22,7
0062 04C0 rjmp L24
0064 .dbline 98
0064 ; * 函数功能:计算距离
0064 8BB3 in R24,0x1b
0066 8260 ori R24,2
0068 8BBB out 0x1b,R24
006A 03C0 xjmp L25
006C L24:
006C .dbline 100
006C ; * 入口参数:无
006C ; * 出口参数:无
006C 8BB3 in R24,0x1b
006E 8D7F andi R24,253
0070 8BBB out 0x1b,R24
0072 L25:
0072 .dbline 101
0072 8BB3 in R24,0x1b
0074 8460 ori R24,4
0076 8BBB out 0x1b,R24
0078 .dbline 102
0078 08E0 ldi R16,8
007A 10E0 ldi R17,0
007C C1DF xcall _delay_us
007E .dbline 103
007E 660F lsl R22
0080 .dbline 104
0080 8BB3 in R24,0x1b
0082 8B7F andi R24,251
0084 8BBB out 0x1b,R24
0086 .dbline 105
0086 08E0 ldi R16,8
0088 10E0 ldi R17,0
008A BADF xcall _delay_us
008C .dbline 106
008C L21:
008C .dbline 95
008C 4395 inc R20
008E L23:
008E .dbline 95
008E 4830 cpi R20,8
0090 38F3 brlo L20
0092 .dbline -2
0092 L19:
0092 0E940000 xcall pop_gset2
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbsym r i 20 c
0098 .dbsym r data 22 c
0098 .dbend
0098 .dbfunc e Receivebyte _Receivebyte fc
0098 ; temp2 -> R16
0098 ; temp1 -> R18
0098 ; i -> R20
.even
0098 _Receivebyte::
0098 0E940000 xcall push_gset1
009C .dbline -1
009C .dbline 117
009C ; **************************************************************/
009C ; float calculate_distance(uint time)
009C ; {
009C ; float value;
009C ; value = time*0.17;//time的单位为10us,S=(T*time/2),单位:cm
009C ; return value;//返回距离值
009C ; }
009C ;
009C ; void main()
009C ; {
009C ; CLI();
009C ; DDRA = 0XFF;
009C ; int2_init();
009C ; timer1_init();
009C ; timer0_init();
009C ; Init_12864(); //液晶初始化
009C ; LcmClearTXT();//液晶清屏
009C .dbline 119
009C ; Display_x_y_data(0,0,"距离:");//液晶显示
009C ; Display_x_y_data(0,7,"CM");//液晶显示
009C 0027 clr R16
009E 2227 clr R18
00A0 .dbline 120
00A0 ; SEI();
00A0 4427 clr R20
00A2 10C0 xjmp L30
00A4 L27:
00A4 .dbline 121
00A4 ; DDRB |= BIT(PB4);
00A4 .dbline 122
00A4 ; TIMSK |= BIT(2);
00A4 220F lsl R18
00A6 .dbline 123
00A6 ; delay_us(200);//设定测量下限为3CM
00A6 8BB3 in R24,0x1b
00A8 8B7F andi R24,251
00AA 8BBB out 0x1b,R24
00AC .dbline 124
00AC ; EIMSK |= BIT(2);
00AC 8BB3 in R24,0x1b
00AE 8460 ori R24,4
00B0 8BBB out 0x1b,R24
00B2 .dbline 125
00B2 ; while(1)
00B2 8BB3 in R24,0x1b
00B4 8B7F andi R24,251
00B6 8BBB out 0x1b,R24
00B8 .dbline 126
00B8 ; {
00B8 8BB3 in R24,0x1b
00BA 8695 lsr R24
00BC 8170 andi R24,1
00BE 09F0 breq L31
00C0 .dbline 126
00C0 2395 inc R18
00C2 L31:
00C2 .dbline 127
00C2 L28:
00C2 .dbline 120
00C2 4395 inc R20
00C4 L30:
00C4 .dbline 120
00C4 4830 cpi R20,8
00C6 70F3 brlo L27
00C8 .dbline 128
00C8 ; if(flag == 1)
00C8 ; {
00C8 4427 clr R20
00CA 10C0 xjmp L36
00CC L33:
00CC .dbline 129
00CC ; //收到返回超声波,清除标志位
00CC .dbline 130
00CC ; flag = 0;
00CC 000F lsl R16
00CE .dbline 131
00CE ; //计算距
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -