资源描述:
《avr单片机红外接收与发射实验》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、AVR单片机红外接收与发射实验供单片机入门学习者练习用的AVR单片机的红外接收与发射实验程序。用单片机入门实验套件提供的红外接收与发射套件完成红外的反射、阻断等实验。红外发射与接收器件广泛应用于机器人竞赛项目中,像寻迹、追光、蔽障等都会用到红外接收与发射器件。该程序用AVR-Studio-4幵发,在AVR单片机Atmega48上调试通过。本实验的详细说明和硬件搭建请参考〉〉单片机入门实验红外接收与发射实验AVR汇编程序;作者:超简单工作室;Email:fullmous@hotmai1.com;软件版本:AVRStudio4.13.571ServicePack2;创建日期:2008.3;版本
2、VI.00;Target:M48;Crystal:8.OOOOMhz轉.include,zm48def.inc"•org$0000rjmp_main.org$0020_port_init:;端口初始化;PORTB=0x00;clrR2out0x5,R2;DDRB=OxFF;ldiR24,255out0x4,R24;PORTC=0x00;out0x8,R2;DDRC=0x06;ldiR24,6out0x7,R24ret_adc_init:;ADC初始化;ADCSRA=0x00;设置前,先关闭ADCclrR2sts122,R2;ADMUX=(l«REFS0);选择内部AVCC为基准ldiR24
3、,64sts124,R24;ACSR=(1«ACD);关闭模拟比较器ldiR24,128out0x30,R24;使能ADC,启动ADC单次转换,选64分频;ADCSRA=(1«ADEN)
4、(1«ADSC)
5、(1«ADPS2)
6、(1«ADPS1);ldiR24,198sts122,R24ret_adc_get:;ADC转换函数;ADCSRA
7、=(1«ADSC);启动ADC转换IdsR24,122oriR24,64sts122,R24L4:;while(ADCSRA&(1«ADSC));判断ADC转换是否结束IdsR2,122sbrcR2,6rjmpL4IdsR16,120IdsR17,120
8、+1ret_delay_us::微秒级延时L8:subiR16,1sbciR17,0ldiR24,1ldiR25,0cpR24,R16cpcR25,R17brltL8ret_delay_ms::毫秒级延时st-y,R20st-y,R21movR20,R16movR21,R17L12:ldiR16,low(1000)ldiR17,high(1000)rcall_delay_ussubiR20,1sbciR21,0cpiR20,0cpcR20,R21brneLI2IdR21,y+IdR20,y+ret_divl6:;双字节除法。同时得到整数和余数;入口:除数在rl8:rl9中,被除数在rl6:
9、rl7中pushR25;r24:r25存中间值,最后是商pushR24clrR25clrR24L_div:cpR16,R18;被除数与除数比较cpcR17,R19brltL_end_div;小于除数,结束adiwR25:R24,1:否则,中间值加1subR16,R18;被除数减除数sbcR17,R19rjmpL_div;返回继续L_end_div:movR18,R24;除法运算结束,商存rl8:rl9中,余数留在rl6:rl7中movR19,R25popR24popR25ret_main:rcall_port_initrcall_adc_initL16:;ADC转换一次rcall_adc一
10、get;结果在rl6:rl7中;adc_v=adc_v/10;ldiR18,10果除10,保证AD转换的最大值100ldiR19,0rcall_divl6movR17,R19;除10得到的结果送rl6:rl7movR16,R18cpiR16,100:被除数与除数比较brltL17;大于100,置成99ldiR16,99L17:;t=adc_v/10;ldiR18,10;继续除10ldiR19,0rcall_divl6;得到一个小于10的商在rl8中,10的模在rl6中ldiR24,2mulR24,R18;将1*18中的值乘2,结果在r0:rl中raovwR30,R0;将r0:rl的值赋给r
11、30:r31,作为偏移量ldiR24,low(_tabs«l);获取字符表基地址ldiR25,high(_tabs«l)addR30,R24移量+基地址构成z指针adcR31,R25lpmR18,Z+0;取字型送入rl8out0x5,R18;字型送PortB,输出ldiR24,4out0x8,R24;4送端口portc,即置位portc.2;delay_ms(10);pushR16;rl6中是除10的余数,即10的模,保