MC9S12XS128终极例程

MC9S12XS128终极例程
MC9S12XS128终极例程

SCI程序

串行通信时MCU与外部设备之间进行通信的一种简单而有效的硬件方法。

无论用查询方式还是中断方式进行串行通信编程,在程序初始化时均必须对SCI进行初始化。初始化主要包括波特率设置、通信格式的设置、发送接收数据方式的设置等。

对SCI进行初始化,需要设置如下几部分:

(1)定义波特率

一般选内部总线时钟为串行通信的时钟源。通过设置SCI波特率寄存器SCI0BD的波特率选择位SBR[12:0],来选择合适的分频系数。

(2)写控制字到SCI控制寄存器1(SCI0CR1)

设置是否允许SCI、数据长度、输出格式、选择唤醒方法、是否校验等。

(3)写控制字到SCI控制寄存器2(SCI0CR2)

设置是否允许发送与接收、是中断接收还是查询接收等。

串行通信程序如下:

/** write in “Init.h” **/

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions */

//void InitBusClk(void); //可以不使用锁相环

void InitSci(void);

/** write in “Init.c” **/

//初始化程序

#include "Init.h"

/*

//------------初始化Bus Clock------------//

void InitBusClk(void) {

DisableInterrupts;

CLKSEL=0X00; //PLLSEL 1 : Bus Clock=PLLCLK/2

// 0 : Bus Clock=OSCCLK/2

PLLCTL_PLLON=1; //开启PLL

SYNR=0; //OSCCLK=16MHz

REFDV=0X0F; //PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/16=2MHz while(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环

CLKSEL_PLLSEL=1; //PLLSEL 1 : Bus Clock=PLLCLK/2=2MHz/2=1MHz

// 0 : Bus Clock=OSCCLK/2=16M/2=8MHz

}

*/

//---------------初始化SCI---------------//

void InitSci(void){

SCI0BD=4545; //设波特率为110

//SCI baud rate = SCI module clock/(16*SCIBD)=Bus Clock/(16*SCIBD)

// = 8MHz/(16*4545)=500kHz/4545=110bps

//SCIBD : SBR12-SBR0,Value from 1 to 8191

SCI0CR1=0;

SCI0CR2=0X2C; // 0010 1100 RIE=1,TE=1,RE=1

// RIE=1 RDRF and OR interrupt requests enabled

// TE=1 Transmitter enabled

// RE=1 Receiver enabled

}

/** write in “SCI.h” **/

//函数声明

unsigned char SciRead();

void SciWrite(byte);

/** write in “SCI.c” **/

//串行通信程序

#include "Init.h"

#include "SCI.h"

//---------------读SCI数据---------------//

unsigned char SciRead(){

if(SCI0SR1_RDRF==1){

//数据从移位寄存器传送到SCI数据寄存器SCIDRL

//SCI0SR1_RDRF==1表明数据寄存器SCI0DRL为满,可以接收新的数据SCI0SR1_RDRF=1; //读取SCI数据寄存器会将RDRF清除,重新置位

return SCI0DRL; //返回数据寄存器的数值

}

}

//---------------写SCI数据---------------//

void SciWrite(byte sci_value){

while(!(SCI0SR1&0X80));

//SCI0SR1_TDRE==1表明数据寄存器SCI0DRL为空,可以发送新的数据SCI0DRH=0;

SCI0DRL=sci_value; //发送新的数据至数据寄存器SCI0DR

}

//---------------中断程序-----------------//

#pragma CODE_SEG NON_BANKED

interrupt 20 void Sci_Intrrupt(void){ //SCI的中断向量号为20

byte text;

DisableInterrupts; //关中断

text=SciRead(); //接收数据寄存器SCI0DRL中的数据

asm nop;

asm nop;

SciWrite(text); //发送数据至数据寄存器SCI0DRL

DDRA=0XFF; //设A口为输出,用来显示是否执行中断,可以不用

PORTA_PA6=!PORTA_PA6;

EnableInterrupts; //开中断

}

#pragma CODE_SEG DEFAULT

/** write in “main.c”” **/

#include "Init.h"

#include "SCI.h"

void main(void) {

/* put your own code here */

_DISABLE_COP(); //关看门狗

DisableInterrupts; //关中断

//InitBusClk();

InitSci();

EnableInterrupts; //开中断

for(;;) {

// _FEED_COP(); /* feeds the dog */

} /* loop forever */

/* please make sure that you never leave main */

}

A/D转换应用实例

要让ATD 开始转换工作,必须经过以下三个步骤:

1.将ADPU 置1,使ATD 启动;

2.按照要求对转换位数、扫描方式、采样时间、时钟频率及标志检查等方式进行设置;

3.发出启动命令;

如果上电默认状态即能满足工作要求,那么只要将ADPU 置1,然后通过控制寄存器发出转换命令,即可实现转换。

程序描述:由通道ATD0进行单通道A/D转换,转换值在B口显示。

程序如下:

程序一:

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions */

byte ad_value; //AD转换结果

void Delay(int i) { //延时程序

int j;

for(;i>0;i--)

for(j=500;j>0;j--)

;

}

/***---------------初始化程序---------------***/

void InitBusClk(void) {

CLKSEL=0X80; //PLLSEL 1 : Bus Clock=PLLCLK/2

// 0 : Bus Clock=OSCCLK/2

PLLCTL_PLLON=1; //开启PLL

SYNR=0;

REFDV=0X03; //OSCCLK=16MHz

//PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/4=8MHz

while(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环

CLKSEL_PLLSEL=1;

//PLLSEL 1 : Bus Clock=PLLCLK/2=8MHz/2=4MHz

// 0 : Bus Clock=OSCCLK/2=16M/2=8MHz

}

void InitAD(void){

ATD0CTL2 = 0XC0; // 1100 0000 启动A/D,快速清除标志位

// 无等待模式,外部触发禁止(bit2=0),

中断禁止(bit1=0)

ATD0CTL3 = 0X0C;

// 0 0001 1 00 转换序列为1 、FIFO模式启动,冻结模式下继续转换

ATD0CTL4 = 0XE1; // 1 11 00001 8位精度,16AD采样时间

// 总线(1+1)*2 = 4 分频,AD时钟= 1MHz ATD0CTL5 = 0X27;

// 0 0 1 0 0 111 右对齐,无符号,连续转换,单通道, 起始通道ATD7

// DJM DSGN SCAN MULT 0 CC CB CA

// DJM :1-Right justified 0-Left justified

// DSGN:1-Signed data 0-Unsigned data

// SCAN:1-Continuous 0-Single conversion

// CC CB CA : Analog Input Channel Select Code

ATD0DIEN = 0X00; // 数字输入disabled

}

/***---------------主程序---------------***/

void main(void) {

/* put your own code here */

_DISABLE_COP(); // 关看门狗

InitBusClk();

InitAD();

DDRB=0XFF; // 设PORTB为输出口

PORTB=0x00;

EnableInterrupts; // 开放总中断

for(;;) {

while(!ATD0STAT2L_CCF7); //等待转换结束,退出循环

ad_value=(byte)ATD0DR7H;

//左对齐,右对齐时转换结果都先存储在ATD0DRxH,后存储在ATD0DRxL.

Delay(200); //延时

PORTB=ad_value;

//PORTB输出AD转换结果,并用8个LED发光二极管显示//_FEED_COP(); /* feeds the dog */

} /* loop forever */

/* please make sure that you never leave main */

}

程序二:(用指针实现AD转换)

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions */ byte AD_Value; //AD转换结果

void Delay(int i) { //延时程序

int j;

for(;i>0;i--)

for(j=500;j>0;j--)

;

}

/***---------------初始化程序---------------***/

(初始化程序与上述相同)

/***---------------读取AD转换结果---------------***/

void AD_GetValue(word *AD_Value){

*AD_Value=ATD0DR0;

}

void main(void) {

/* put your own code here */

_DISABLE_COP(); //关看门狗

InitBusClk();

InitAD();

DDRB=0XFF; //设PORTB为输出口

PORTB=0x00;

EnableInterrupts;

for(;;) {

while(!ATD0STAT2L_CCF7); //等待转换结束,退出循环

AD_GetValue(&AD_Value); //读取转换结果

Delay(400);

PORTB=AD_Value; //转换结果在B口显示

_FEED_COP(); /* feeds the dog */

} /* loop forever */

/* please make sure that you never leave main */

}

程序三:(用中断实现AD转换)

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions */

#include

byte AD_Data=0;

//*

void Delay(int i) {

int j;

for(;i>0;i--)

for(j=500;j>0;j--)

;

}

//*/

/***---------------初始化程序---------------***/

void InitBusClk(void) {

CLKSEL=0X80; //PLLSEL 1 : Bus Clock=PLLCLK/2

// 0 : Bus Clock=OSCCLK/2

PLLCTL_PLLON=1; //开启PLL

SYNR=0;

REFDV=0X03; //OSCCLK=16MHz

//PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/4=8MHz while(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环

CLKSEL_PLLSEL=1; //PLLSEL 1 : Bus Clock=PLLCLK/2=8MHz/2=4MHz

// 0 : Bus Clock=OSCCLK/2=16M/2=8MHz

}

void InitAD(void){

ATD0CTL2 = 0XC3;

// 110 000 11 启动A/D,快速清除标志位,无等待模式,外部触发禁止(bit2=0) // 中断开放(bit1=1,bit0=1)

// bit1 :ATD Sequence Complete Interrupt Enable

// bit0 :ATD Sequence Complete Interrupt Flag

ATD0CTL3 = 0X0C;

// 0 0001 1 00 转换序列为1 、FIFO模式启动,冻结模式下继续转换

ATD0CTL4 = 0XE1; // 1 11 00001 8位精度,16AD采样时间

// 总线(1+1)*2 = 4 分频,AD时钟= 1M

ATD0CTL5 = 0XA7;

// 1010 0111 右对齐,无符号,连续转换,单通道, 起始通道ATD7

ATD0DIEN = 0X00; // 数字输入disabled

}

/***---------------主程序---------------***/

void main(void) {

/* put your own code here */

DisableInterrupts; //关中断

InitBusClk();

InitAD();

DDRB=0XFF; //设B口为输出口

PORTB=0X00;

EnableInterrupts; //开中断

for(;;){

//while(!ATD0STAT2L_CCF7);

PORTB=(byte)AD_Data; //B口显示转换结构

}

}

/***---------------中断服务程序---------------***/

#pragma CODE_SEG NON_BANKED

void interrupt 22 IntAD(void){ // AD转换的中断向量号为33 DisableInterrupts; //关中断

//while(!ATD0STAT2L_CCF7);

AD_Data=ATD0DR0H; //读取AD转换结果

EnableInterrupts; //开中断

}

#pragma CODE_SEG DEFAULT

PWM例程

//---------------------------------------------------------------------------------------------------//

//功能说明:MC9S12XS128--PWM例程

//使用说明:实现通道0(PTP0)输出频率为1Hz,占空比为50%的方波,可以用发光二极管显示,每秒钟放光二极管亮一次

//--------------------------------------------------------------------------------------------------//

#include /* common defines and macros */

#include "derivative.h" /* derivative-specific definitions */

void Delay(int i){

int j ;

for(;i>0;i--)

for(j=500;j>0;j--)

;

}

void InitPWM(void){

PWME =0x00; //clear PWM Enable register 关闭PWM输出PWMPOL = 0XFF; //初始极性高电平

PWMCAE =0x00; // left allign 左对齐

//PWMCTL = 0x50; // 0101 0000 CON01 CON45

PWMCLK = 0x01; // 0000 0001 con0 uses Clock SA

// SA Clock A is the clock source for PWM channel 0

// SA Clock SA is the clock source for PWM channel 1

// SA Clock B is the clock source for PWM channel 2

// SA Clock B is the clock source for PWM channel 3

// SA Clock A is the clock source for PWM channel 4

// SA Clock A is the clock source for PWM channel 5

// SA Clock B is the clock source for PWM channel 6

// SA Clock B is the clock source for PWM channel 7

PWMPRCLK=0x07;

// 0000 0111 时钟A 128分频clockA=bus colck/128=8MHz/128=1/16 MHz

PWMSCLA=0XFA;

// 1111 1010 时钟SA为1/16MHz/(250*2)=1/8000MHz=1/8kHz=1000/8Hz=125Hz

PWMPER0=125; // Period = 1s *** (0.008)*125=1s *** PWMDTY0=60;

PWME = 0x01; // 0000 0001 开启通道0的PWM 输出

}

void main(void) {

/* put your own code here */

InitPWM();

EnableInterrupts;

for(;;) {

_FEED_COP(); /* feeds the dog */

} /* loop forever */

/* please make sure that you never leave main */

}

MC9S12XS128 AD转换详解

A/D转换模块详解 1、A/D转换原理 A/D转换的过程是模拟信号依次通过取样、保持和量化、编码几个过程后转换为数字格式。 a)取样与保持 一般取样与保持过程是同时完成的,取样-保持电路的原理图如图16所示,由输 入放大器A 1、输出放大器A 2 、保持电容C H 和电子开关S组成,要求 A V1 * A V2 = 1。原 理是:当开关S闭合时,电路处于取样阶段,电容器充电,由于 A V1 * A V2 = 1,所以 输出等于输入;当开关S断开时,由于A 2输入阻抗较大而且开关理想,可认为C H 没有 放电回路,输出电压保持不变。 图16 取样-保持电路 取样-保持以均匀间隔对模拟信号进行抽样,并且在每个抽样运算后在足够的时间内保持抽样值恒定,以保证输出值可以被A/D 转换器精确转换。 b)量化与编码 量化的方法,一般有舍尾取整法和四舍五入法,过程是先取顶量化单位Δ,量化单位取值越小,量化误差的绝对值就越小,具体过程在这里就不做介绍了。将量化后的结果用二进制码表示叫做编码。 2、A/D转换器的技术指标 a)分辨率 分辨率说明A/D转换器对输入信号的分辨能力,理论上,n位A/D转换器能区分的输入电压的最小值为满量程的1/2n 。也就是说,在参考电压一定时,输出位数越多,量化单位就越小,分辨率就越高。S12的ATD模块中,若输出设置为8位的话,那么转换器能区分的输入信号最小电压为19.53mV。 b)转换时间

A/D转换器按其工作原理可以分为并联比较型(转换速度快ns级)、逐次逼近型(转换速度适中us级)、双积分型(速度慢抗干扰能力强)。 不同类型的转化的A/D转换器转换时间不尽相同,S12的ATD模块中,8位数字 量转换时间仅有6us,10位数字量转换时间仅有7us。 S12内置了2组10位/8位的A/D模块:ATD0和ATD1,共有16个模拟量输入通道,属于逐次逼近型A/D转换器(这个转换过程与用天平称物的原理相似)。 1、功能结构图 图17 A/D 模块功能结构图 图17所示的是A/D 模块的功能结构,这个功能模块被虚线划分成为图示所示的虚线所隔离的三个部分:IP总线接口、转换模式控制/寄存器列表,自定义模拟量。 IP 总线接口负责该模块与总线的连接,实现A/D 模块和通用I/O 的目的,还起 到分频的作用; 转换模式控制寄存器列表中有控制该模块的所有的寄存器,执行左右对齐运行和连 续扫描。 自定义模拟量负责实现模拟量到数字量的转换。包括了执行一次简单转换所需的模 拟量和数字量。 2、HCS12中A/D转化模块特点 8/10 位精度;7 us, 10-位单次转换时间.;采样缓冲放大器;可编程采样时间;左/ 右对齐, 有符号/无符号结果数据;外部触发控制;转换完成中断;模拟输入8 通道复用;模拟/数字输入引脚复用;1到8转换序列长度;连续转换模式;多通道扫描方式。 ATD 模块有模拟量前端、模拟量转换、控制部分及结果存储等四部分组成。其中模拟前端包括多路转换开关、采样缓冲器、放大器等,结果存储部分主要有8个16 位的存储器和反映工作状态的若干标志位。 A/D转换应用实例 要让ATD 开始转换工作,必须经过以下三个步骤: 1.将ADPU 置1,使ATD 启动;

C++程序设计实践教程思考题答案

实验1 C++基础 6.编写程序,输入某大写字母的ASCII码值,输出该字母的对应小写字母。 #include using namespace std; int main() { int i; cin>>i; if(i>=65 && 1<=90 ) cout< #include using namespace std; int main()

{ float a,b,c; 潣瑵?请输入直角三角形的两条边长:; cin>>a>>b; c=sqrt(a*a+b*b); 潣瑵?直角三角形的斜边=< using namespace std; int main() { char c; 1 潣瑵?请输入一个字符:; cin>>c; if(c>='A'&& c<='Z') c+='a'-'A'; cout<

3.输入一个学生的成绩,如高于60分,则输出“pass”;否则,输出“failed”。 #include using namespace std; int main() { float grade; 潣瑵?请输入成绩:; cin>>grade; if(grade>=60) cout<

vb程序设计实验教程习题答案

实验教材实验一 1:单项选择题: A A C C C D C B B C 2:填空题: (1).bas (2).vbp,.frm (3)视图工具箱 (4)对象 (5)属性对象事件方法 (6)Windows (7)事件行为 (8)窗体模块 实验二 1:单项选择题: A D C C A B A B D C B B C B C B A B D C 2:基本运算题: (1)27 (2)3.33333333333333 (3)3 (4)0 (5)-3 (6)2 (7)ab33 (8)类型不匹配 (9)3 (10)AB3 实验三 1:单项选择题: B C B D C 2:填空题: (1)300 (2)321456 (3)Shanghai (4)6 7 6 (5)True (6)2+3=5 (7)”area=” 12.56 (8)VISUAL 实验四 1:单项选择题: C A A C A 2:填空题: (1)7 (2)3 5

(3)输入的数小于0 (4)3 (5)False (6)2010 is not leap year. 试验五 1:单项选择题: A C C A B A C C C B 2:填空题: (1)9 (2)①n ②1 (3)①Len(a) ②n\2 ③Mid(a,(n-i+1),1) ④Mid(a,(n-i+1),1) (4)①n Mod 3=1 And n Mod 5=1 And n Mod 7=1 ②While CountN<5 (5)Mid(c1,1,i) 实验六 1:单项选择题: D B D C D A C A D D 2:填空题: (1)30 (2)3 (3)①a(2) ②a(3) ③a(1) (4)①1 ②2 ③a(i)=a(6-i) (5)①i+j ②0 ③a(i,j) (6)①Print ②k ③a(k,j)=a(j,k) ④a(k,j); 实验七 1:单项选择题: A B B A C B 2:填空题: (1)15 (2)①Preserve a(n+1) ②a(i+1)=a(i) ③Exit For ④a(i+1)=m⑤0 to n+1 (或LBound(a) to UBound(a)) (3)d,c,b,a 实验八 1:单项选择题: C A D B D C A C B 2:填空题: (1)a=9 b=4 (2) 36 25 16 9 4 1 (3)①a ②UBound(b) ③

VB程序设计教程(第3版)课后实验答案最新版2

1、完成实验A(P.259)中的第1、 2、 3、5题。 2、参照第2章例2.6,建立一个类似记事本的应用程序,提供:(1) 剪切、复制和粘贴的编辑操作;(2) 字体大小的格式设置;此外,再对记事本的应用程序的功能进行一点扩允。 1.完成在实验B 顺序结构程序。(P.262)中的第1、2 、4 、5.、6题 2.完成实验C 选择结构(P.266)中的第1、2、4、5题 3.用上面实验B的第二题和实验C的第二题完成下面的实验报告。 1、完成实验D循环结构(P.268)中的第1、3、4、6题,其中第1题利用单循环结构显示如图D.1(P.268)所示的界面,而后将图形改为倒三角形。 2、选做实验E数组(P.271)中的第1、2、3题中的任意二题 3、以实验D中的第4题和实验E中的做完的某一题完成下面的实验报告。 A.1 Private Sub Command1_Click() Label3 = Text1 End Sub A.2 Private Sub Form_Load() Timer1.Interval = 0 End Sub Private Sub Command1_Click() '自动 Timer1.Interval = 200 End Sub Private Sub Command2_Click() '手动 Timer1.Interval = 0 Call MyMove End Sub Private Sub Timer1_Timer() Call MyMove End Sub Sub MyMove() Label1.Move Label1.Left - 50 If Label1.Left < 0 Then Label1.Left = Form1.Width End Sub A.3 Private Sub Form_Click() Text1 = Val(Text1) + 1 End Sub Private Sub Form_Load() Text1 = 0 End Sub A.5

飞思卡尔MC9S12XS128技术手册翻译AD

飞思卡尔MC9S12XS128技术手册(AD转换部分) 英文资料:飞思卡尔MC9S12XS256RMV1官方技术手册 1.1 XS12系列单片机的特点 XS12系列单片机特点如下: ·16位S12CPU —向上支持S12模糊指令集并去除了其中的MEM, WAV, WAVR, REV, REVW 五条指令; —模块映射地址机制(MMC); —背景调试模块(BDM); ·CRG时钟和复位发生器 —COP看门狗; —实时中断; ·标准定时器模块 —8个16位输入捕捉或输出比较通道;; —16位计数器,8位精密与分频功能; —1个16位脉冲累加器; ·周期中断定时器PIT —4具有独立溢出定时的定时器; —溢出定时可选范围在1到2^24总线时钟; —溢出中断和外部触发器; ·多达8个的8位或4个16位PWM通道 —每个通道的周期和占空比有程序决定; —输出方式可以选择左对齐或中心对其; —可编程时钟选择逻辑,且可选频率范围很宽; ·SPI通信模块 —可选择8位或16位数据宽度;

—全双工或半双工通信方式; —收发双向缓冲; —主机或从机模式; —可选择最高有效为先输出或者最低有效位先输出; ·两个SCI串行通信接口 —全双工或半双工模式 ·输入输出端口 —多达91个通用I/O引脚,根据封装方式,有些引脚未被引出; —两个单输入引脚; ·封装形式 —112引脚薄型四边引线扁平封装(LQFP); —80引脚扁平封装(QFP); —64引脚LQFP封装; ·工作条件 —全功率模式下单电源供电范围3.15V到5V; —CPU总线频率最大为40MHz —工作温度范围–40 C到125 C 第十章模拟—数字转换 10.1 介绍 ADC12B16C是一个16通道,12位,复用方式输入逐次逼近模拟—数字转换器。 ATD的精度由电器规格决定。 10.1.1 特点 ·可设置8位、10位、12位精度 ·在停止模式下,ATD转换使用内部时钟 ·转换序列结束后自动进入低耗电模式 ·可编程采样时间 ·转化结果可选择左对齐或右对齐

MATLAB程序设计教程课后答案

实验指导 1、 n=input('请输入一个三位数:'); a=fix(n/100); b=fix((n-a*100)/10); c=n-a*100-b*10; d=c*100+b*10+a 2(1) n=input('请输入成绩'); switch n case num2cell(90:100) p='A'; case num2cell(80:89) p='B'; case num2cell(70:79) p='C'; case num2cell(60:69) p='D'; otherwise p='E'; end price=p (2)n=input('请输入成绩'); if n>=90&n<=100 p='A'; elseif n>=80&n<=89 p='B'; elseif n>=70&n<=79 p='C'; elseif n>=60&n<=69 p='D'; else p='E'; end price=p (3)try n; catch price='erroe' end 3 n=[1,5,56,4,3,476,45,6,3,76,45,6,4,3,6,4,23,76,908,6]; a=n(1);

for m=2:20 if n(m)>a a=n(m); elseif n(m)=0 disp(A([n],:)); elseif n<0 disp(lasterr); else disp(A([6],:)); disp(lasterr); end 7(1) f=[]; for n=1:40

c语言程序设计实践教程答案完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体4.编译和连接 5.分号 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7.D 8.A 9.B 10.B 11.D 12.B 13.A或B 14.C 15.B

17.D 18.D 19.C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.n=1 5.-4 6.a=1,b= ,c=2 7.c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A 6.B

8.D 9.B 10.C 11.A 12.A 13.C 14.B 15.正确答案为: 二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4.1 5.13 6.(cx=getchar())!=-1 front=cx; 7.m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D 6.C 7.D

MC9S12XS128终极例程

SCI程序 串行通信时MCU与外部设备之间进行通信的一种简单而有效的硬件方法。 无论用查询方式还是中断方式进行串行通信编程,在程序初始化时均必须对SCI进行初始化。初始化主要包括波特率设置、通信格式的设置、发送接收数据方式的设置等。 对SCI进行初始化,需要设置如下几部分: (1)定义波特率 一般选内部总线时钟为串行通信的时钟源。通过设置SCI波特率寄存器SCI0BD的波特率选择位SBR[12:0],来选择合适的分频系数。 (2)写控制字到SCI控制寄存器1(SCI0CR1) 设置是否允许SCI、数据长度、输出格式、选择唤醒方法、是否校验等。 (3)写控制字到SCI控制寄存器2(SCI0CR2) 设置是否允许发送与接收、是中断接收还是查询接收等。 串行通信程序如下: /** write in “Init.h” **/ #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ //void InitBusClk(void); //可以不使用锁相环 void InitSci(void); /** write in “Init.c” **/ //初始化程序 #include "Init.h" /* //------------初始化Bus Clock------------// void InitBusClk(void) { DisableInterrupts; CLKSEL=0X00; //PLLSEL 1 : Bus Clock=PLLCLK/2 // 0 : Bus Clock=OSCCLK/2 PLLCTL_PLLON=1; //开启PLL SYNR=0; //OSCCLK=16MHz REFDV=0X0F; //PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/16=2MHz while(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环 CLKSEL_PLLSEL=1; //PLLSEL 1 : Bus Clock=PLLCLK/2=2MHz/2=1MHz // 0 : Bus Clock=OSCCLK/2=16M/2=8MHz } */

C程序设计教程与实验实验答案

#include void main() { int i; static int a[8]={10,5,4,0,12,18,20,46}; void jhmaxmin(); printf("Original array:\n"); for(i=0;i<8;i++) printf("%5d",a[i]); printf("/n"); jhmaxmin(a,8); printf("Array after swapwing max and min: \n"); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n"); } void jhmaxmin(int p[],int n) { int t,*max,*min,*end,*q; end=p+n; max=min=p; for(q=p+1;q*max) max=q; if(*q<*min) min=q; } t=*max; *max=*min; *min=t; } Sy8-2 #include int len(char s[]) { char *p=s; while (*p!='\0')p++; return p-s; } main() { char s[80]; gets(s); printf("\"%s\"include %d characters.\n",s,len(s)); }

#include #include void main() { int i,a[26]; char ch,str[80],*p=str; gets(str); for(i=0;i<26;i++) a[i]=0; while(*p!='\0') { ch=*(p++); ch=ch>'A'&&ch<='Z'?ch+'a'-'A':ch; if('a' main() { int a[8],*p; int i,j,t,k; p=a; printf("Input the numbers:"); for(i=0;i<8;i++) scanf("%d",p+i); t=*p; for(i=0;i<8;i++) { for(j=i;j<8;j++) if(j==i||*(p+j)

C#程序设计基础教程与实训习题答案

附录Ⅰ各章习题答案 第1章C#语言概述 一、判断题 1、√ 2、× 3、√ 4、× 5、√ 6、√ 7、× 8、× 二、选择题 1、C 2、B 3、C 4、A 5、A 6、B 7、B 8、B 三、填空题 1、最新的;面向对象 2、C和C++;JA V A 3、先进设计思想;安全性能 4、灵活性 5、集成开发环境(IDE)——Visual https://www.360docs.net/doc/2515119235.html, 6、Microsoft .NET Framework(微软.NET框架体系) 7、最基本的通用语言运行时库CLR(Common Language Runtime);一些提供了具体功能的类库 8、需要开发和设计的项目文件;应用程序或组件 四、简答题 1、①简洁易用的语法。②自动的资源回收机制。③与Web的紧密结合。④完整的安全性与错误处理。⑤版本处理技术。⑥灵活性和兼容性。 2、C#程序必须包含一个Main方法,Main方法是程序的入口点,程序控制在该方法中开始和结束。该方法用来执行任务,并在任务完成后返回信息。 第2章常用标准控件 一、判断题 1、× 2、× 3、√ 4、× 5、√ 6、× 7、√ 8、√ 二、选择题 1、A 2、C 3、B 4、D 5、A 6、B 7、B 8、D 三、填空题 1、输入/输出信息 2、属性 3、事件 4、TextAlign 5、Click 6、文本框(TextBox) 7、保证数据标准化 8、Show 四、简答题 1、简述生成控件的操作过程。 (1)单击工具箱中相应的工具按钮,这一按钮呈现被按下状态,表明被选定。 (2)移动鼠标到窗体上,这时鼠标的指针变成十字形,在需要放置控件的左上角位置按下鼠标左键。 (3)在窗体范围内向下向右拖动鼠标,这时窗体上会显示一个矩形框,当其大小合适时,松开鼠标左键,窗体上就会显示一个相应大小的这种控件。 另外一种快捷的方法是在工具箱中相应的工具按钮上双击此按钮,窗体上就会出现一个系统默认大小的所选按钮。 2、消息框有多少种Button参数设置? OK:只显示“确定”按钮 OKCancel:显示“确定”和“取消”按钮 AbortRetryIgnore:显示“终止”、“重试”和“忽略”按钮 YesNoCancel:显示“是”、“否”和“取消”

MC9S12XS128单片机简介

MC9S12XS128 单片机简介 1、HCS12X 系列单片机简介 Freescale 公司的16 位单片机主要分为HC12 、HCS12、HCS12X 三个系列。HC12核心是16 位高速CPU12 核,总线速度8MHZ;HCS12 系列单片机以速度更快的CPU12 内核为核心,简称S12 系列,典型的S12 总线速度可以达到25MHZ。HCS12X 系列单片机是Freescale 公司于2005 年推出的HCS12 系列增强型产品,基于S12 CPU 内核,可以达到25MHz 的HCS12 的2-5 倍性能。总线频率最高可达40 MHz。S12X 系列单片机目前又有几个子系列:MC9S12XA 系列、MC9S12XB 系列、MC9S12XD 系列、MC9S12XE 系列、MC9S12XF系列、MC9S12XH 系列和MC9S12XS 系列。MC9S12XS128 就是S12X 系列中的一个成员。 2、MC9S12XS128 性能概述 MC9S12XS128 是16 位单片机,由16 位中央处理单元(CPU12X)、128KB 程序 Flash(P-lash)、8KB RAM、8KB 数据Flash(D-lash)组成片内存储器。主要功能模块包 括: 内部存储器 内部PLL 锁相环模块 2 个异步串口通讯SCI 1 个串行外设接口SPI MSCAN 模块 1 个8 通道输入/输出比较定时器模块TIM 周期中断定时器模块PIT 16 通道A/D 转换模块ADC 1 个8 通道脉冲宽度调制模块PWM 输入/输出数字I/O 口 3、输入/输出数字I/O 口 MC9S12XS128 有3 种封装,分别为64 引脚、80 引脚、112 引脚封装。其全名分别为MC9S12XS128MAE、MC9S12XS128MAA、MC9S12XS128MAL。MC9S12XS 系列具有丰富的输入/输出端口资源,同时集成了多种功能模块,端口包括PORTA、PORTB、PORTE、PORTK、PORTT、PORTS、PORTM、PORTP、PORTH、PORTJ 和PORTAD 共11 个端口。端口引脚大多为复用口,往往具有多重功能,所有端口都具有通用I/O 口功能。 PORTA、PORTB、PORTK 为通用I/O 口 PORTE 中的IRO 和XIRQ 引脚可作为外部中断输入 PORTT 集成了TIM 模块功能 PORTS 集成了SCI 和SPI 模块功能 PORTM 集成了CAN 总线模块 PORTP 集成了PWM 模块功能 PORTH、PORTJ 可作为外部中断输入口 PORTAD 集成了ATD 模块功能 在MC9S12XS128 单片机中有些特殊功能可定义为多个引脚,如PWM、SCI1 模块。对于这些具有相同功能的引脚定义,由端口T 路径寄存器PTTRR 和模块路径寄存器MODRR 确定。MC9S12XS128 的 3 种封装的引脚数目不一样,所具有的通用端口的引脚和功能有

JSP程序设计与项目实训教程(第2版)课后习题答案

第1章Web技术简介 1.7 习题 1.7.1 选择题 1. Web技术的设想于哪一年提出()。 A.1954年 B.1969年 C.1989年 D.1990年 2. JSP页面在第一次运行时被JSP引擎转化为()。 A.HTML文件 B.CGI文件 C.CSS文件 D.Servlet文件 3. JavaEE体系中Web层技术是()。 A.HTML B.JavaBean C.EJB D.JSP 参考答案:1.C 2.D 3.D 1.7.2 填空题 1.当前主流的三大动态Web开发技术是:PHP、ASP/https://www.360docs.net/doc/2515119235.html,和______________。 2. JSP的两种体系结构是:______________和______________。 3. JSP开发Web站点的主要方式有:直接JSP、JSP+JavaBean、______________、______________和SSH。 参考答案: 1.JSP 2.JSP Model1和JSP Model2 3.JSP+JavaBean+Servlet、J2EE/JavaEE 1.7.3 简答题 1. 简述JSP的工作原理。 答:所有的JSP应用程序在首次载入时都被翻译成Servlet文件,然后再运行,这个工作主要是由JSP引擎来完成。当第一次运行一个JSP页面时,JSP引擎要完成以下操作: ●将JSP文件翻译成Servlet文件,Servlet文件是Java应用程序。 ●JSP引擎调用Java编译器,编译Servlet文件得到可执行的代码文件(.class文件)。 ●JSP引擎调用Java虚拟机解释执行.class文件,并将运行结果返回给服务器。 ●服务器将运行结果以HTML形式作为响应返回给客户端的浏览器。 由于一个JSP页面在第一次被访问时要经过翻译、编译和执行这几个步骤,所以客户端得到响应所需要的时间比较长。当该页面再次被访问时,它对应的.class文件已经生成,不需要再次翻译和编译,JSP引擎可以直接执行.class文件,因此JSP页面的访问速度会大为提高。 2. 简述JSP两种体系结构。

Java程序设计与实践教程 王薇主编 答案

第1章JAVA简介 一、判断题 1.√ 2.√ 3.? 4.? 5.? 6.√ 7.√ 8.√ 9.? 10.? 二、填空题 1.Application Applet 2. 类(字节码文件、目标文件) .class 3.对象 4. 主 5. J2SE J2EE J2ME 三、选择题 1.B 2. D 3.B 4.B 5. A 四、简答题 1.参考答案 Java语言是简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可 移植的、编译解释型的、高性能的、多线程的、动态的等等。 2.参考答案 Java程序执行的具体过程如图1所示。 图1 Java程序的运行机制 3.参考答案 Java程序在计算机在执行要经历以下几个阶段: (1)使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境 (JCreater、Eclipse、MyEclipse等)编辑Java源文件,其文件扩展名为.java。 (2)通过编译使.java的文件生成一个同名的.class文件。 (3)通过解释方式将.class的字节码文件转变为由0和1组成的二进制指令执行。 在以上阶段中可以看出Java程序的执行包括了编译和解释两种方式。 第2章Java 语法基础 一、判断题

1. ? 2.√ 3. ? 4.? 5.? 二、填空题 1.10 2. 单精度双精度 3. n%13 !=0?false:true 4.接口 5. false 三、选择题 1.D 2. C 3.D 4.A 5. C 第3章程序流程控制 一、判断题 1.错误 2.? 3.? 4.? 5.√ 二、填空题 1.循环 2. if 3.case switch 4. while do-while 5. continue 三、选择题 1.D 2. C 3.C 4.B 5. C 第4章数组 一、判断题 1. ? 2. √ 3. √ 4. √ 5.? 二、填空题 1.类型 2. new 3.长度 4. 分配空间 5. 3 6 9 三、选择题 1.D 2. A 3.C 4.B 5. B 第5章类和对象 一、判断题 1.√ 2.√ 3.? 4.? 5.√ 6.? 7.√ 8.? 9.? 10.√ 11.√ 12.√ 13.? 14.? 15. ? 二、填空题 1.public default 2. class 属性方法 3.public static void main(String args[]){} 4. new

MC9S12XS128 串口操作例程

MC9S12XS128 串口操作例程 Code Warrior 4.7 Target : MC9S12XS128 Crystal: 16.000Mhz busclock: 8.000MHz pllclock:16.000MHz 本程序主要包括以下功能: 1.设置锁相环和总线频率; 2.IO口使用; 3.共四路ATD使用及显示方法。 LED计数,根据灯亮可以读取系统循环了多少次 ************************************************************** ***************************/ #include /* common defines and macros */ #include /* derivative information */ #include #include #include #pragma LINK_INFO DERIVATIVE "mc9s12xs128" #pragma CODE_SEG DEFAULT #define CR_as_CRLF TRUE // if true , you can use "\n" to act as CR/LF, // if false, you have to use "\n\r",but can get a higher speed static int do_padding; static int left_flag; static int len; static int num1; static int num2; static char pad_character; unsigned char uart_getkey(void) { while(!(SCI0SR1&0x80)) ; //keep waiting when not empty return SCI0DRL; } /* void uart_init(void) { SCI0CR2=0x0c;

MC9S12XS128学习中文精华终极版版

IO口模块程序示例 Void PORTB_Init(void){ DDRB=0xff; //PB口作输出使用,1为输出,0为输入 PORTB=0x00; //PB口数据寄存器值 } 注意:IO口要注意以下几点:(1)每个IO口的数据寄存器名可能不同(2)AN口只能作输入用(3)PH,PJ(高两位,低两位),PP可用输入中断功能使用(4)IO口作输入与输出时有不同的寄存器对应(5)IO口作复用时不能作IO 口用,相反也不行 IO口可用作:调试接口(接数码管、液晶、拨码开关等等)所以必须掌握 使用拨码开关要注意这样用; DDRB=0XFF; //输出 P ORTB=0XFF; DDRB=0X00; //输入 AD模块程序示例 Void ATD_Init(void){

ATD0CTL1 = 0x00; //8位精度,不放电 ATD0CTL2 = 0x42; //快速清除标志位,禁止外部触发,使能中断 ATD0CTL3=0x8a;//右对齐,每序列4次转换,不用FIFO,进入FreezeMode完成当前转换 ATD0CTL4 = 0x03; //采样用4个ATD周期,F(ATD)=1MHz[bus clock为8MHz] ATD0CTL5 = 0x29; //SCAN模式,单通道,通道9 ATD0DIEN = 0x00; //禁止数据输入 } Void main(void){ ATD_Init(); ……………………………………… } #pragma CODE_SEG NON_BANKED

void interrupt 22 Int_AD0(void) { DisableInterrupts; AD_wData = ATD0DR0L; //读ATD转换的寄存器值(低八位) ATD0STAT0_SCF=0; //(当AFFC为1时,写0清零;为1 时写1清零) EnableInterrupts; } 注意:ATD模块要着重注意:(1)标志位清零(比较复杂)(2)多通道转换后的储存顺序(3)精度的选择和转换速度(4) 单个通道与多通道转换的区别 定时器模块程序示例 Void Timer_Init(void){ TSCR1=0X90; //使能定时器并设置为自动清除标志TFLG1 TSCR2=0X03; //设置分频系数为8,及23

C++程序设计教程实验答案

实验1.1 #include "iostream.h" #include "iomanip.h" void main() { int x; cin>>x; int y; y=x*x; cout<<"x*x="<

实验1.3 #include "iostream.h" void main() { float x,y,z,s; cout<<"请输入三门成绩x,y,z:"<>x>>y>>z; s=(x+y+z)/3; cout<<"三门课平均成绩为:"<

实验2.1 #include "iostream.h" #include "iomanip.h" void main() { float s1,s2,s3; double aver; cout<<"输入三个数据:"<>s1>>s2>>s3; aver=(s1+s2+s3)/3; aver=aver*100+0.5; aver=(int)aver; aver=aver/100; cout<<"平均值="<

实验2.2 #include "iostream.h" #include "math.h" void main() { double x,y,z; cout<<"请输入直角三角形的两直角边长:"<>x>>y; z=sqrt(x*x+y*y); cout<<"该直角三角形的斜边长为:"<>a>>b>>c; if (a

蓝宙MC9S12XS128-80最小系统板 使用说明书

Freescale系列单片机MC9S12XS128-80最小系统板 产品使用说明书 版本:Version 1.0 所有者:蓝宙电子研发部 日期:2011.07.10

目录 最小系统板简介---------------------------------------- 最小系统板特性---------------------------------------- 最小系统板结构说明------------------------------------ 安装CodeWorror调试文件-------------------------------- 安装HC(S)12(X)内核CodeWorror调试文件----------------- 使用CodeWorror IDE烧写和调试程序的方法----------------

简介: 本店MC9S12XS128最小系统板是由多年专业项目开发经验的工程师根据当前实际单片机应用产品情况以及学生学习的角度定制,经过历多版和反复测试验证。全部采用原装芯片和元器件,经典蓝板设计,PCB布局走线规范,采用高品质材料,稳定可靠,并采用回流焊工艺焊接,焊接质量高,系统板质量可靠。这里描述的9S12XS128单片机基本系统模块是针对全国大学生飞思卡尔杯智能车模竞赛设计的,采用大赛组委会推荐的80引脚器件。本开发板适用于嵌入式工程师与学生对M9S12系列单片机开发、学习,带CAN总线开发的工程项目。 MC9S12XS128微控制器产品满足了用户对设计灵活性和平台兼容性的需求,并在一系列汽车电子平台上实了可升级性、硬件和软件可重用性、以及兼容性。S12XS 系列可以经济而又兼容地扩展至带 XGate 协处理器的S12XE 系列单片机,从为用户削减了成本,并缩小了封装尺寸。S12XS系列帮助设计者迅速抓住市场机遇,同还能降低移植成本。

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

1、定时器IC/OC功能选择寄存器TIOS IOS[7..0]IC/OC功能选择通道 0 相应通道选择为输入捕捉(IC) 1 相应通道选择为输出比较(OC) 2、定时器比较强制寄存器 CFORC FOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。 【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。 3、输出比较7屏蔽寄存器 OC7M OC7M[7..0]OC7(即通道7的输出比较)具有特殊地位,它匹配时可以直接改变PT7个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器OC7M决定哪些通道将处于 OC7的管理之下。OC7M中的各位与PORTT口寄存器的各位一一对应。当通过 TIOS将某个通道设定为输出比较时,将OC7M中的相应位置1,对应的引脚就是输 出状态,与DDR中的对应位的状态无关,但OC7Mn并不改变DDR相应位的状 态。 【说明】OC7M具有更高的优先级,它优于通过TCTL1和TCTL2寄存器中的OMn和OLn 设定的引脚动作,若OC7M中某个位置1,就会阻止相应引脚上由OM和OL设定的动作。

4、输出比较7数据寄存器 OC7D OC7D[7..0]OC7M对于其他OC输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器OC7D中的对应位中。当OC7匹配成功后,若某个OC7Mn=1,则内部逻辑将OC7Dn送到对应引脚。OC7D中的各位与PORTT口寄存器的各位一一对 应。当通道7比较成功时,如果OC7M中的某个位为1,OC7D中的对应位将被输 出到PORTT的对应引脚。 【总结】通道7的输出比较(OC7)具有特殊的位置,在OC7Mn和OC7Dn两个寄存器设置以后,OC7成功输出后将会引起一系列的动作。比如:OC7M0=1,则通道0处在OC7的管理 下,在OC7成功后,系统会将OC7D0的逻辑数据(仅限0或者1)反应在PT0端口上。另 外,在OC7Mn置位后,相应的引脚就被设置为输出引脚,与DDRTn无关了,OC7Mn 并不改变DDR相应位的状态。 5、定时器核心计数寄存器 TCNT TCNT[15..0]XS128 Timer模块的核心是一个16位自由运行计数器(TCNT),所有输入捕捉和输出比较功能的计时信息都来源于TCNT,当定时器系统启用时,通过设置TSCR1的 TEN位,计数器从$0000开始,每经过一个模块时钟加1,直到加到$FFFF,然后自动 溢出为$0000并继续计数.16位自由记数器的当前值保存在两个8位寄存器中,高 的存在TCNTH,低的存在TCNTL中.综合这两个寄存器就形成TCNT.定义TCNT的 话,要定义为word型。 【说明】这里的模块时钟指的是,经过分频后的ECT模块所用的时钟,分频系数在TSCR2的低三位。TCNT是一个递增的计数器,有很多人一直把它当做是递减的计数器。总之,TCNT就是对ECT时钟进行计数的。

相关文档
最新文档