📄 cscj_timer1.lis
字号:
.module cscj_timer1.C
.area data(ram, con, rel)
0000 _AC_TABLE::
0000 .blkb 2
.area idata
0000 8081 .byte 128,129
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 8283 .byte 130,131
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 8485 .byte 132,133
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 8687 .byte 134,135
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 9091 .byte 144,145
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 9293 .byte 146,147
.area data(ram, con, rel)
000C .blkb 2
.area idata
000C 9495 .byte 148,149
.area data(ram, con, rel)
000E .blkb 2
.area idata
000E 9697 .byte 150,151
.area data(ram, con, rel)
0010 .blkb 2
.area idata
0010 8889 .byte 136,137
.area data(ram, con, rel)
0012 .blkb 2
.area idata
0012 8A8B .byte 138,139
.area data(ram, con, rel)
0014 .blkb 2
.area idata
0014 8C8D .byte 140,141
.area data(ram, con, rel)
0016 .blkb 2
.area idata
0016 8E8F .byte 142,143
.area data(ram, con, rel)
0018 .blkb 2
.area idata
0018 9899 .byte 152,153
.area data(ram, con, rel)
001A .blkb 2
.area idata
001A 9A9B .byte 154,155
.area data(ram, con, rel)
001C .blkb 2
.area idata
001C 9C9D .byte 156,157
.area data(ram, con, rel)
001E .blkb 2
.area idata
001E 9E9F .byte 158,159
.area data(ram, con, rel)
0020 .dbfile d:\我的文档\桌面\超声波/12864.h
0020 .dbsym e AC_TABLE _AC_TABLE A[32:32]c
.area text(rom, con, rel)
0000 .dbfile d:\我的文档\桌面\超声波/12864.h
0000 .dbfunc e delay_us _delay_us fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; t -> R16,R17
.even
0000 _delay_us::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 63
0004 ; /*******************************************
0004 ; * 文件名: ultrawave.c
0004 ; * 功能: 用超声波模块检测小车前方是否有障碍物并测量其距离
0004 ; * 说明:
0004 ; 1.定时器0产生40khz占空比50%的方波驱动超声波发射头发射超声波
0004 ; 2.定时器1定时计算超声波发射到接收需要的时间,从而计算距离
0004 ; 3.外部中断2用于检测是否遇到障碍物 遇到障碍物时进入外部中断处理子函数
0004 ; 4.分段进行距离校正,3~10cm减2cm,10~20减1cm,20~100精确
0004 ; /********************************************/
0004 ; #include <iom128v.h>
0004 ; #include <macros.h>
0004 ; #include "12864.h"
0004 ; //变量、常量定义
0004 ; static uchar data[16];
0004 ; static float distance=0.0;
0004 ; volatile flag=0;
0004 ; volatile uint time_counter=0;
0004 ; //中断定义
0004 ; #pragma interrupt_handler interrupt_int2:4
0004 ; #pragma interrupt_handler interrupt_timer1:15
0004 ;
0004 ; /*******************************************
0004 ; * 函数名称: int2()
0004 ; * 函数功能: 进入中断后置标志位,表示收到超声波,并计算距离
0004 ; * 入口参数: 无
0004 ; * 出口参数: 无
0004 ; /********************************************/
0004 ; void interrupt_int2()
0004 ; {
0004 ; DDRB &= ~BIT(PB4);
0004 ; EIMSK &= ~BIT(2);
0004 ; TIMSK &= ~BIT(2);
0004 ; flag = 1;
0004 ; }
0004 ;
0004 ; /*******************************************
0004 ; * 函数名称: timer1()
0004 ; * 函数功能: 进入定时器中断后time_counter加1,用于距离的计算
0004 ; * 入口参数: 无
0004 ; * 出口参数: 无
0004 ; /********************************************/
0004 ; void interrupt_timer1()
0004 ; {
0004 ; TCNT1H = 0xff;
0004 ; TCNT1L = 0x60;
0004 ; time_counter++;
0004 ; if(time_counter == 589)//设定测量上限为1米
0004 ; {
0004 ; TIMSK &= ~BIT(2);
0004 ; time_counter = 589;
0004 ; }
0004 ; }
0004 ;
0004 ; /*******************************************
0004 ; * 函数名称: int2_init()
0004 ; * 函数功能: 外部中断2初始化
0004 ; * 入口参数: 无
0004 ; * 出口参数: 无
0004 ; /********************************************/
0004 ; void int2_init()
0004 ; {
0004 ; DDRD &= ~BIT(2);
0004 ; PORTD|= BIT(2); //设置输出口上拉
0004 .dbline 65
0004 ; EICRA = 0X20;
0004 ; EIMSK &= ~BIT(2);
0004 A801 movw R20,R16
0006 0AC0 xjmp L5
0008 L2:
0008 .dbline 66
0008 62E0 ldi R22,2
000A 70E0 ldi R23,0
000C 02C0 xjmp L9
000E L6:
000E .dbline 66
000E L7:
000E .dbline 66
000E 6150 subi R22,1
0010 7040 sbci R23,0
0012 L9:
0012 .dbline 66
0012 6030 cpi R22,0
0014 6707 cpc R22,R23
0016 D9F7 brne L6
0018 X0:
0018 L3:
0018 .dbline 65
0018 4150 subi R20,1
001A 5040 sbci R21,0
001C L5:
001C .dbline 65
001C 4030 cpi R20,0
001E 4507 cpc R20,R21
0020 99F7 brne L2
0022 X1:
0022 .dbline -2
0022 L1:
0022 0E940000 xcall pop_gset2
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r i 20 i
0028 .dbsym r j 22 i
0028 .dbsym r t 16 i
0028 .dbend
0028 .dbfunc e delay_ms _delay_ms fV
0028 ; i -> R20,R21
0028 ; j -> R22,R23
0028 ; t -> R16,R17
.even
0028 _delay_ms::
0028 0E940000 xcall push_gset2
002C .dbline -1
002C .dbline 77
002C ; }
002C ;
002C ; /*******************************************
002C ; * 函数名称: timer0_init()
002C ; * 函数功能: 定时器0初始化 配置输出40khz占空比50%的方波
002C ; * 入口参数: 无
002C ; * 出口参数: 无
002C ; /********************************************/
002C ; void timer0_init()
002C ; {
002C ; DDRB &= ~BIT(PB4);
002C ; ASSR &= ~BIT(3);
002C .dbline 79
002C ; TCCR0 = 0X19;
002C ; OCR0 = 0Xc7;//经示波器测试产生39.92kHZ的正弦方波
002C A801 movw R20,R16
002E 0AC0 xjmp L14
0030 L11:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -