微机原理A4纸资料(汇编及之后)(3)

泪眼朦胧 分享 2022-05-06 下载文档

⑴ ①查询程序 I 主机发送程序: #include

#include "derivative.h"

int a=0; void main(void) {

DisableInterrupts; /*禁止所有中断*/ SPIC1=0x56; /*使能SPI 功能,并设本机为主机*/ SPIC2=0x10; SPIBR=0x77; /*设预置分频因子为8,设分频因子为256*/ PTBDD_PTBDD5=1; PTBD_PTBD5=0; /*使SS 为低电平,选通从机*/ /*初始化完毕*/ while(a==0) { if(SPIS_SPTEF){ /*判断是否可以发送*/ SPID=0x57; /*将待发送数据送入发送缓冲器*/ PTBDD_PTBDD7=1; PTBD_PTBD7=0; /*点亮LED2,以显示发送成功*/ a=1; } } PTBD_PTBD5=1; /*使SS 为高电平,通信结束*/ for(;;) { __RESET_WATCHDOG(); } } II 从机接收程序: #include #include "derivative.h" int a,b=0; void main(void) { DisableInterrupts; /*禁止所有中断*/ SPIC1=0x46; /*使能SPI 功能,并设本机为从机*/ SPIC2=0x10; SPIBR=0x77; /*设预置分频因子为8,设分频因子为256*/ while(b==0){ if(SPIS_SPRF==1) { /*判断是否可以接受*/ a=SPID; if(a==0x57){ /*判断接收的数据是否正确*/ PTBDD_PTBDD6=1; PTBD_PTBD6=0; /*点亮LED1,以示接收成功*/ b=1; } } } for(;;) { __RESET_WATCHDOG(); } } ② 中断程序 I 主机先发送再接收程序: #include #include "derivative.h" int a; void main(void) { EnableInterrupts; SPIC1=0x76; /*使能SPI 功能,并设本机为主机*/ SPIC2=0x10; SPIBR=0x77; /*设预置分频因子为8,设分频因子为256*/ PTBDD_PTBDD5=1; PTBD_PTBD5=0; /*使SS 为低电平,选通从机*/ /*初始化完毕*/ for(;;) { __RESET_WATCHDOG(); } } void interrupt 13 spi(){ if(SPIS_SPTEF) { /*判断是否可以发送*/ SPIC1_SPTIE=0; PTBDD_PTBDD7=1; PTBD_PTBD7=0; /*点亮LED2,以示发送成功*/ SPID=0x57; /*将待发送数据送入发送缓冲器*/ SPIC1_SPIE=1; } if(SPIS_SPRF) { a=SPID; if(a==0x56){ SPIC1_SPIE=0; PTBDD_PTBDD6=1; PTBD_PTBD6=0; PTBD_PTBD5=1; } } } II 从机先接收再发送程序: #include #include "derivative.h" int a; void main(void) { EnableInterrupts; SPIC1=0x0C6; /*使能SPI 功能,并设本机为从机*/ SPIC2=0x10; SPIBR=0x77; /*设预置分频因子为8,设分频因子为256*/ for(;;) { __RESET_WATCHDOG(); } } void interrupt 13 spi(){ __RESET_WATCHDOG(); if(SPIS_SPRF&&SPIC1_SPIE) { /*接收数据*/ a=SPID; if(a==0x57){ SPIC1_SPIE=0; PTBDD_PTBDD6=1; PTBD_PTBD6=0; SPIC1_SPTIE=1; /*开发送中断*/ } } else __RESET_WATCHDOG(); if(SPIS_SPTEF&&SPIC1_SPTIE) { /*又发送新数据*/ SPID=0x56; PTBDD_PTBDD7=1; PTBD_PTBD7=0; SPIC1_SPTIE=0; } else __RESET_WATCHDOG(); } 其他例程

实验内容 1> PC 通过串口总线发送’o’(open 的意思)字符到单片机,单片机接收到’o’后,点亮LED2灯,并返回’D’(Done 的意思)字符; 2> PC 通过串口总线发送’c’(close 的意思)字符到单片机,单片机接收到’c’后,熄灭LED2灯,并返回’D’字符; 3> PC 通过串口总线发送’f’(flash 的意思)字符到单片机,单片机接收到’f’后, LED2灯以512ms 的周期进行闪烁,并返回’D’字符; 波特率设置为19200 参考程序 #include #include "derivative.h“ void SCISendc(unsigned char c); Int Cnt; void main(void) { SOPT1=0X03; SCIBD=4000000/16/19200; SCIC1=0x00; SCIC2=0x2C; SCIC3=0x00; PTBDD = 0xFF; SRTISC = 0x16; for(;;) { } /* loop forever */ }

void SCISendc(unsigned char c) { while(!SCIS1_TDRE); SCID=c;

}

interrupt 15 void Rel(){

unsigned char i;

i=SCID;

switch (i) {

case 0x67 :

PTBD_PTBD7=0;Cnt=0;S CISendc(‘D’);break;

case 0x63 :

PTBD_PTBD7=1;Cnt=0;S CISendc(‘D’;)break;

case 0x66 : Cnt = 1; SCISendc(‘D’;)break;

}

}

interrupt 23 void RTI_ISR() {

if(Cnt=1) {

PTBD ^=0xff;}

else{

}

SRTISC = 0x56; //清除标志

}

实验内容

基于MC9S08QG8单片机编写SPI 通信方式的主机程序(C语言),并画流程图。总线频率4MHz,时钟极性设置为平时低电平,时钟相位为前沿输出,后沿采样,8位数据传送时高位在前。波特率12500bps(25000bps),采用查询方式,传送数组SPI_BUFF[6]里的6个数据,不考虑SPI模块的SS 管脚的使用。

分析:分频比=总线时钟/bps=4000000/12500=320

据此,预分频因子5(100),波特率分频因子:64(101)/(32)(100)SPIBR:01000100(0x44)

参考程序

#include

#include "derivative.h"

//包含头文件

char SPI_BUFF[6],j; /*定义两个全局变量*/

void main(void) {

DisableInterrupts;

/*禁止所有中断*/

SPIC1=0X54;

/*使能SPI功能,并设本机为主机*/

SPIBR=0X45(0X44);

/*设预置分频因子为5,设分频因子为64(32)*/

PTBDD_PTBDD5=1;

PTBD_PTBD5=0;

/*使SS为低电平,选通从机*/ for(j=0;j<6;j++) {

while(SPIS_SPTEF==0);

/*判断是否可以发送*/

SPID=SPI_BUFF[j];

/*将待发送数据送入发送缓冲器*/

}

}

实验内容

MC9S08QG8的8个AD模拟输入端分别连接温度采集电路,对八个位置进行温度监控,用C语言编写程序,在数组AD_DATA[8] 中保存8个位置的温度转换数值。(AD 配置为低功耗,1分频、长采样、8位模式、总线时钟,采用RTI 硬件触发,每秒钟转换一次。)

参考程序

提示:先采用硬件触发的方式对0通道进行转换,在0通道的转换完成中断里切换通道,分别对其它通道进行软件触发方式的转换,将所有通道转换结果保存在某个数组中,全部完成后,求出数组的最大值,并存放在某个采用固定地址定义的变量中。

#include

unsigned char AD_DATA[8] ; void main(void){ DisableInterrupts;

SOPT1 = 0x03; //1

SRTISC = 0x47; //1 ADCCFG = 0x90; //1

ADCSC2 = 0x40; //1

ADCSC1 = 0x40; //1

APCTL1 = 0Xff; //1 EnableInterrupts;

while(1);

}

interrupt 19 void AD_ISR() //1

{

unsigned char i;

AD_DATA[0] = ADCRL; //1 ADCSC2 = 0x00; //1 for(i = 1;i<8;i++)

//1

{

ADCSC1 = i;

//1

while(ADCSC1_COCO!=1

) ; //1

AD_DATA[i] = ADCRL;

//1

}

ADCSC2 = 0x40;

//1

ADCSC1 = 0x40;

//1

}

实验内容

请用C语言编程实现如下功能:

飞思卡尔QG8单片机,采用 16

位的TPM模块在通道0产生边沿

对齐的PWM方波,方波频率1KHz,

占空比可由KEY1控制(接PTA2);

KEY1事件采用中断处理方式,初

始运行时PWM方波的占空比为

25%,以后每次按动KEY1键,方

波的占空比增加25%,达到100%

后再按键则恢复到25%占空比。

参考程序

#include

#include “derivative.h”

unsigned char int PWM_HIGH;

void main(void){

DisableInterrupts;

SOPT1=0X03; //看

门狗设置及MAIN函数1分

PTBDD=0XFF; //I/O

端口设置3分

PTADD=0;

PTBD=0XFF;

TPMMOD=4000;

TPMSC=0X08;

TPMC0V=1000;

PWM_HIGH=TPMC0V;

TPMC0SC=0X68;

KBISC=0X04; //键

盘设置3分

KBIES=0;

KBIPE=0X04;

KBISC=0X06;

EnableInterrupt; //使

能中断1分

for(;;){ //死

循环1分

}

}

void interrupt 18 KBI_ISR() {

//键盘中断程

序6分

unsigned int delay;

for(delay=0;delay<1000;delay

++)

{}

if(PWM_HIGH<4000)

{PWM_HIGH+=1000;}

else{PWM_HIGH=1000;}

KBISC=0x06;

}

____________________________

小题

1、单片机组成:1> CPU 2> 存

储器 3>I/O ;

2、存储器包括2大类: ROM , RAM

3、标准ASCII码使用(1)个字

节表示字符;

4、BCD码是用(二)进制表示的

(十)的数据;

5、HCS08QG8的最小系统包括(电

源和时钟,复位电路,程序下载

口);

6、QG8管脚数量(16)、只能输

入的是(PTA5)、只能输出的是

(PTA4)、程序下载的是(PTA4)、

接外部时钟的是(PTB6和PTB7);

7、QG8的管脚可以作为数字输入

输出、也可以作为模拟输入,可

以作为模拟输入的有(A3~A0);

8、QG8管脚复用优先级最低的功

能是(数字I/O);

9、QG8存储器配置中,不同资源

的分界线(P39);

10、CPU寄存器有(A, HX, PC, CCR,

SP);

11、可以执行位操作的地址范围

(0X0000~0X005F);

12、有地址的寄存器分成了(3)

块(0页,高页,非易失);

13、如何在C语言中定义常数(数

据类型变量名;),如何指定变量

的地址(数据类型变量名 @ 地

址;);

14、堆栈的管理者是寄存器(SP);

15、SP的复位缺省值是(0X00FF),

一般应该通过程序将其调整到

(0x025F);

16、堆栈对数据的操作特点是(向

上生长型:先压后减、先弹后加;

先进后出,后进先出);

17、堆栈一般在RAM的高地址区

域还是低地址区域?高地址区

18、内部时钟源包括哪4大部分:

外部时钟,低成本晶体振荡器,可

编程内部时钟参考,锁频环

19、外部时钟分哪2大类;振荡

器,整形外部时钟

20、内部时钟中FLL固定倍频(512

倍频);

21、ICS的7种工作模式(FEI, FEE,

FBI, FBILP, FBE, FBELP, stop);

22、ICS的内部参考时钟是可以

校准、微调的,调整的寄存器名

(ICSTRM,(在0页));该寄存器

的数值越大,输出时钟频率越

(低);


微机原理A4纸资料(汇编及之后)(3).doc 将本文的Word文档下载到电脑

下一篇:《灯光》读书笔记范文五篇

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

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