第一范文网 - 专业文章范例文档资料分享平台

单片机课后习题答案(《单片机应用技术》C语言版)

来源:用户分享 时间:2025/6/6 9:47:37 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

器,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免溢出而产生不必要的中断,此时应禁止T1中断。

7.4 答:

参考程序如下: #include

#define uchar unsigned char code uchar

tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f};

uchar send[]={0x04,0x03,0x02,0x01,0x08,0x07,0x06,0x05}; int i,t;

//延时函数,当t取值12000时,若晶振fosc=12MHz,大约延时1s void delay(t) {for(i=0;i

main() {

unsigned char i,j,k,m;

SCON=0x00; //串行口工作方式 while(1)

{ for(i=0;i<6;i++)

{SBUF=(tab[send[i]]); // 发送第i个数据 while(TI==0); // 等待发送是否完成 TI=0; // TI清0 }

delay(12000) ; for(m=6;m<12;m++)

{SBUF=(tab[send[m]]); // 发送第i个数据 while(TI==0); // 等待发送是否完成 TI=0; // TI清0 }

delay(12000) ; } } 7.5 答:

参考程序如下: 甲机发送

发送子程序参考如下: #include #include #include

#include #include

#define uchar unsigned char uchar FREQ; void main(void) {

// 以下是设置中断和定时器 EA=1; PT0=1; ET0=1; TCON=0x08; TMOD=0x21;

/*定时器计数变量*/

// 定时器0为产生10ms的中断,定时器1为9600bit/s 的波特率发生器 TH0=-10000/256; TL0=-10000%6; TL1=0xfd; TH1=0xfd; SCON=0xd8; PCON=0x00; TR1=1;

// 开定时器

//串行口方式3发送

TR0=1; TI=1; while(1){} }

// 定时器0的中断服务程序,向串口发送“A”数据 void intsvr1(void) interrupt 1 {

// 重新装入定时器0的初值; TH0=-10000/256; TL0=-10000%6; FREQ=FREQ+1; if (FREQ==100) {

FREQ=0; printf(\ } }

// 发送字符

// 定时器T0的低四位赋值

// 1秒判断

乙机接收子程序参考如下: #include

#define uchar unsigned char void main(void) { uchar astring;

//在11.059MHz晶振下,设置串行口波特率为9600bit/s,用串行口方式3接收

TMOD=0x20;

TH1=0xfd; TL1=0xfd; TR1=1; SCON=0xdb; PCON=0x00; while(1) {

while(RI==0); RI=0;

astring=SBUF;

lcd_display(); //液晶显示参考前面章节程序

} } 7.6 答:

参考程序如下: #include

#define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3; bit read_flag= 0 ;

//串行口初始化函数:init_serialcomm

//函数功能:串行口初始化,设置波特率为4800bit/s,允许串口中断 //形式参数:无 //返回值:无

void init_serialcomm( void ) {

SCON = 0x50 ; //SCON: 串行口方式1,允许接收 TMOD |= 0x20 ; //设置定时器1为方式2定时

PCON |= 0x80 ; //SMOD=1;

TH1 = 0xf4 ; // 波特率4800bit/s, fosc=11.0592MHz TL1 = 0xf4 ;

IE = 0x90 ; //开串口中断 TR1 = 1 ; // 启动定时器1 }

//发送字符函数:send_char_com //函数功能:向串口发送一个字符

//形式参数:存放字符的变量ch, unsigned char类型 //返回值:无

void send_char_com( unsigned char ch) {

SBUF=ch;

while (TI== 0 ); TI= 0 ; }

//发送字符串函数:send_string_com

//函数功能:向串口发送一个字符串,strlen为该字符串长度

//形式参数:字符串变量*str, unsigned char 类型; 字符串长度strlen, unsigned int //类型 //返回值: 无

void send_string_com( unsigned char *str, unsigned int strlen) {

unsigned int k= 0 ; do {

send_char_com(*(str + k)); k++;

} while (k < strlen);

}

//串口接收中断函数

void serial () interrupt 4 using 3 {

if (RI) {

unsigned char ch; RI = 0 ; ch=SBUF; if (ch> 127 ) {

count3= 0 ;

inbuf1[count3]=ch; checksum= ch- 128 ; } else {

count3++;

inbuf1[count3]=ch; checksum ^= ch;

if ( (count3==(INBUF_LEN- 1 )) && (!checksum) ) //最后一个字节是否为前

几个字节//后7位的异或校验和

{

read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,

//就置位取数标志

} } } }

void main() {

init_serialcomm(); while ( 1 ) {

//初始化串口 //主函数

单片机课后习题答案(《单片机应用技术》C语言版).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0vqsc4mmgh2mdyx423a46cyp27lzc201bnc_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top