程序设计复习要点.docx

上传人:b****4 文档编号:24525382 上传时间:2023-05-28 格式:DOCX 页数:14 大小:346.61KB
下载 相关 举报
程序设计复习要点.docx_第1页
第1页 / 共14页
程序设计复习要点.docx_第2页
第2页 / 共14页
程序设计复习要点.docx_第3页
第3页 / 共14页
程序设计复习要点.docx_第4页
第4页 / 共14页
程序设计复习要点.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

程序设计复习要点.docx

《程序设计复习要点.docx》由会员分享,可在线阅读,更多相关《程序设计复习要点.docx(14页珍藏版)》请在冰豆网上搜索。

程序设计复习要点.docx

程序设计复习要点

程序设计复习要点

5、MEGA16单片机的USART模块中一帧数据中空闲位和起始位是什么状态?

画图说明

校验位,可以为奇校验或偶校验

起始位,总是为低电平

数据位(0~8)

停止位,总是为高电平

1.通讯线上没有数据传输(RxD或TxD),线路空闲时必须为高电平

 

四、按图编程

1、想使用单片机的PA口接8位发光二极管,PB1\PB2接两个按键,PB7接一只继电器,请这几这样的一个电路原理图(10分)

2、由图所示,编程实现U2、U1单片机的双机通信功能。

(15分)

要求:

单片机使用内部晶振1兆赫兹,波特率4800时URBB=12,8位数据、无奇偶校验、1位停止位,异步通信,按下各自的按键时使另一块单片机上的LED闪烁4次。

 

四、按图编程

1、根据图1所示2位共阳数码管,试用动态显示编程实现显示12数字(10分)

 

#include"iom16v.h"

#defineledseg1_onPORTA|=(1<

#defineledseg1_offPORTA&=~(1<

#defineledseg2_onPORTA|=(1<

#defineledseg2_offPORTA&=~(1<

//***GONGYANGXING**

//constunsignedcharNum_Dis_TDB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

voidDelay_1_ms(void)

{

unsignedcharcnt_i,cnt_j;

for(cnt_i=0;cnt_i<40;cnt_i++)

{

for(cnt_j=0;cnt_j<33;cnt_j++)

{

}

}

}

voidDelay_n_ms(unsignedintn_ms)

{

unsignedintcnt_i;

for(cnt_i=0;cnt_i

{

Delay_1_ms();

}

}

voidmain(void)

{

unsignedchardis_temp,i;

DDRA=0xFF;

PORTA=0xFF;

DDRB=0xFF;

PORTB=0xFF;

DDRD=0x00;

PORTD=0xff;

while

(1)

{

PORTB=0xF9;

ledseg1_on;

Delay_n_ms(20);

ledseg1_off;

PORTB=0xA4;

ledseg2_on;

Delay_n_ms(20);

ledseg2_off;

}

}

2、由图2所示,编程实现U2单片机的按键动作控制U1单片机的LED亮灭。

(15分)

要求:

单片机使用内部晶振1兆赫兹,波特率4800时URBB=12,8位数据、无奇偶校验、1位停止位,异步通信,发送采用查询方式、接收采用中断方式。

 

1、根据图1所示用外部中断0外接一个按键,在中断服务程序中使LED闪烁3次

时间间隔1秒(10分)

 

#include"iom16v.h"

#include"macros.h"

#defineled_onPORTC|=(1<

#defineled_offPORTC&=~(1<

voidDelay_1_ms(void)

{

unsignedcharcnt_i,cnt_j;

for(cnt_i=0;cnt_i<40;cnt_i++)

{

for(cnt_j=0;cnt_j<33;cnt_j++)

{

}

}

}

voidDelay_n_ms(unsignedintn_ms)

{

unsignedintcnt_i;

for(cnt_i=0;cnt_i

{

Delay_1_ms();

}

}

#pragmainterrupt_handlerINT0_isr:

2

voidINT0_isr(void)

{

unsignedchari;

for(i=0;i<3;i++)

{

led_on;

Delay_n_ms(50);

led_off;

Delay_n_ms(50);

}

}

voidmain(void)

{

CLI();//全局中断标志禁止

DDRD=0x00;

PORTD=0xFF;

DDRC=0xFF;

MCUCR=(1<

GICR=(1<

使能外部中断请求0,I←0,0x40;/

SEI();//全局中断标志使能,I←1

while

(1)

{

//等待中断信号

}

}

2、由图2所示,编程实现A/D模块的读数据及初始化子程序。

(15分)

要求:

10位数据转换结果,只完成AD部分的初始化及数据读取的子程序。

 

(1)ADC初始化子程序

voidATmega16_ADC_Init(void)

{

ADCSRA=0x00;//关闭ADC

ADMUX=0x40;//选择参考电压为AVCC、数据右对齐、通道0

ACSR=0x80;//关闭模拟比较器的电源

ADCSRA=0x87;//使能ADC、单次转换、ADC转换中断禁止、128分频

}

(2)ADC转换读数据子程序

unsignedintATmega16_ADC_Convert()//void

{unsignedintadc_value;

ATmega16_AD_Start;//启动AD转换

while(!

(ADCSR&(1<

adc_value=(unsignedint)ADCL;//读取低8位

adc_value|=((unsignedint)(ADCH&0x03))<<8;//读取高2位

NOP();

returnadc_value;

}

1、根据图1所示,完整编程序让LED亮一秒,灭一秒,循环不止(8分)

 

假设晶振为4Mhz。

程序如下:

#include"iom16v.h"

#defineled_onPORTA|=(1<

#defineled_offPORTA&=~(1<

voidDelay_1_ms(void)

{

unsignedcharcnt_i,cnt_j;

for(cnt_i=0;cnt_i<40;cnt_i++)

{

for(cnt_j=0;cnt_j<33;cnt_j++)

{

}

}

}

voidDelay_n_ms(unsignedintn_ms)

{

unsignedintcnt_i;

for(cnt_i=0;cnt_i

{

Delay_1_ms();

}

}

voidmain(void)

{

DDRA=0xFF;

PORTA=0xFF;

while

(1)

{

led_on;

Delay_n_ms(1000);

led_off;

Delay_n_ms(1000);

}

}

2、由图2所示,完成编写按键扫描程序,可以直接使用第1题中延时子程序名称,按键值任意。

(8分)

#include"iom16v.h"

#defineled_onPORTC|=(1<

#defineled_offPORTC&=~(1<

voidDelay_1_ms(void)

{

}

voidDelay_n_ms(unsignedintn_ms)

{

}

unsignedcharGet_Key_Val()

{

unsignedcharkey_val=0;

if(PINA!

=0XFF)//

{

key_val=PINA;

switch(key_val)//

{

case0xdf:

key_val=1;break;

default:

break;

}

}

returnkey_val;//

}

voidmain(void)

{

unsignedcharcnt_i;

DDRA=0x00;

PORTA=0xFF;

//DDRC=0xFF;

//PORTC=0xFF;

while

(1)

{

while(Get_Key_Val()==0);//

if(Get_Key_Val()==1)

{

led_on;

Delay_n_ms(10);

led_off;

Delay_n_ms(10);

}

}

}

3、由图3所示,编写单片机AD转换模块的,初始化及获取转换值的两个子程序,要求数据右对齐,其他按图设置。

(10分)

(1)ADC多工选择寄存器-ADMUX

Bit7:

6-REFS1:

0:

参考电压选择Bit5-ADLAR:

ADC转换结果左对齐

Bits4:

0-MUX4:

0:

模拟通道与增益选择位

(2)ADC控制和状态寄存器A-ADCSRA

Bit7-ADEN:

ADC使能Bit6-ADSC:

ADC开始转换Bit5-ADATE:

ADC自动触发使能Bit4-ADIF:

ADC中断标志Bit3-ADIE:

ADC中断使能Bits2:

0-ADPS2:

0:

ADC预分频器选择位

(1)ADC初始化

voidATmega16_ADC_Init(void)

{

ADCSRA=0x00;//关闭ADC

ADMUX=0x43;//选择参考电压为AVCC、数据右对齐、通道3

ACSR=0x80;//关闭模拟比较器的电源

ADCSRA=0x87;//使能ADC、单次转换、ADC转换中断禁止、128分频

}

(2)ADC转换子程序

unsignedintATmega16_ADC_Convert()//void

{

unsignedintadc_value;

ATmega16_AD_Start;//启动AD转换

while(!

(ADCSR&(1<

adc_value=(unsignedint)ADCL;//读取低8位

adc_value|=((unsignedint)(ADCH&0x03))<<8;//读取高2位

NOP();

returnadc_value;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1