单片机课后习题 - 图文

2019-01-12 18:59

P148作业

5-5请分别定义下列变量:

(1) 片内RAM中无符号字符型变量x;

unsigned char data x;

(2) 片内RAM中位寻址区无符号字符型变量y,将y.0-y.2再分别定义为位变量

key_in、key_up、key_down; unsigned char bdata y; sbit key_in=y^0; sbit key_up=y^1; sbit key_down=y^2;

(3) 片外RAM中整型变量x,并指定变量x的绝对地址为4000H;

xdata int x _at_ 0x4000; 或 #define x XWORD[[0x2000]

(4)特殊功能寄存器变量PCON;

sfr PCON=0x87;

5-7用C51语言编程实现,片内扩展RAM的000EH单元和000FH单元的内容交换。 #include void main() {

unsigned char *pp1,*pp2,temp; }

5-9 试用C51语言编写程序实现将片内RAM 21H单元存放的两位BCD码数转换为十六进制数存入30H单元。 data unsigned char y1 _at_ 0x21;

AUXR&=0xfd; pp1=0x000e; pp2=0x000f; temp=*pp1; *pp1=*pp2; *pp2=temp;

data unsigned char y2 _at_ 0x30; void main() {

unsigned char temp; temp=y1; y1=(y1&0xf0)>>4; }

P208作业

7-7在STC12C5A60S2单片机中,假设系统的时钟频率为12MHz,利用定时/计数器T0,分别用汇编语言和C51编程实现在P1.0引脚输出周期为2s的方波。

分析:仿例题7-3,要产生周期2s的方波,需定时1s,一个定时器完成不了,可定时50ms,T0工作在方式1,然后利用R7对50ms定时中断计数20次来实现。选择12T模式,T0x12=0,f=12MHz,则需计数50000,初值为65536-50000=15536=3CB0H (1)汇编程序:

ORG 0000H

LJMP MAIN

ORG 000BH ;T0的中断向量入口地址

LJMP T0_INT ORG 0100H

MAIN:MOV SP,#0BFH ;初始化堆栈指针 MOV TMOD,# 01H ;T0工作在方式1 MOV TL0,#0B0H ;给T0写入初值 MOV TH0,#03CH

MOV R7,#20 ;利用寄存器R7计数20次

SETB EA ;开放总中断 SETB ET0 ;T1溢出中断允许 SETB TR0 ;启动T1开始工作 SJMP $

T0_INT:MOV TL0,#0B0H ;重新赋初值

MOV TH0,#03CH

y2=y1*10+(temp&0x0f);

DJNZ R7,NEXT

CPL P1.0

MOV R7,#20 ;重新赋给R7值50 NEXT:RETI

END

(1) C51程序:

#include/

sbit P1_0=P1^0; unsigned char i=0; void main( ) {

TMOD=0x01;//T0工作在方式1 TL0=0xB0;//给T0装入初值 TH0=0x3C; EA=1;//开放总中断 ET0=1;//T0溢出中断允许 TR0=1;//启动T0开始工作 while(1); }

void T0_INT( ) interrupt 1//T0中断服务程序 {

TH0=0x3C;

i++; if(i= =20) {

P1_0=!P1_0;

TL0=0xB0;//重新置入初值

i=0;

} }

7-8由P1口驱动8个指示灯,利用定时/计数器T1的定时功能分别用汇编语言和C51编程实现8个指示灯依次循环点亮(输出高电平),点亮间隔为1s,反复循环。

分析:仿照上题,T1需定时50ms,R7计数20次,达到定时1s的目的,每隔1s,循环一次,实现轮流点亮。 (1)汇编程序

ORG 0000H

LJMP MAIN

ORG 001BH ;T1的中断向量入口地址

LJMP T1_INT ORG 0100H

MAIN:MOV SP,#0BFH ;初始化堆栈指针 MOV TMOD,# 10H ;T1工作在方式1 MOV TL1,#0B0H ;给T1写入初值 MOV TH1,#03CH

MOV R7,#20 ;利用寄存器R7计数20次 MOV A,#01H

SETB EA ;开放总中断 SETB ET1 ;T1溢出中断允许 SETB TR1 ;启动T1开始工作 SJMP $

T1_INT:MOV TL1,#0B0H ;重新赋初值

MOV TH1,#03CH

DJNZ R7,NEXT ; R7减1不为0,说明中断次数未

;到20次,跳转到NEXT处返回

MOV P1,A; RL A ;为下一次做准备

MOV R7,#20 ;重新赋给R7值50 NEXT:RETI END

(2) C51程序:

#include

unsigned char i=0; unsigned char j; void main( ) {

TMOD=0x10;//T1工作在方式1 TL1=0xB0;//给T1装入初值 TH1=0x3C;

j=0x01;

EA=1;//开放总中断 ET1=1;//T1溢出中断允许 TR1=1;//启动T1开始工作 while(1); }

void T1_INT( ) interrupt 3//T1中断服务程序 {

TH1=0x3C;

TL1=0xB0;//重新置入初值 i++; if(i= =20) {

P1=j;//已定时中断20次 i=0;

j=_crol_(j,1);

} }

7-12 假设系统时钟频率为12MHz,利用PCA模块的功能,分别用汇编语言和C51编程实现在P1.3引脚上间断重复输出频率为450Hz的方波,持续和停止时间均为4s。

分析:将PCA模块的工作方式寄存器CCAPM0寄存器写为4DH,即PCA0设为时钟输出方式,从而可以在P1.3引脚自动翻转,输出方波,并允许PCA中断。要求方波频率为450hz,即周期为1/450,定时时间应设定为1/900s,选择计数器时钟来源为系统时钟频率的12分频,即工作方式寄存器CMOD设为00H,需要计数(1/900)(/12/12000000)=10000/9≈1111=0457H


单片机课后习题 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:ArcSde的两种连接方式、区别和常见问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: