飞思卡尔单片机编程实例!!

合集下载

飞思卡尔单片机LED控制例程详解-推荐下载

飞思卡尔单片机LED控制例程详解-推荐下载
我的第一个 LED 程序
准备工作: 硬件:Freescale MC9S08JM60 型单片机一块; 软件:集成开发环境 codewarrior IDE; 开发板上有两个 LED 灯,如下图所示:
实验步骤: 1. 首先,确保单片机集成开发环境及 USBDM 驱动正确安装。其中 USBDM 的安装步骤如下: 假设之前安装过单片机的集成开发环境 6.3 版本:CW_MCU_V6_3_SE; 运行 USBDM_4_7_0i_Win,这个程序会在 c 盘的程序文件夹下增加一个目录 C:\Program
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

飞思卡尔单片机编程

飞思卡尔单片机编程

关于Codewarrior 中的 .prm 文件网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。

有什么错误请指正。

正文:关于Codewarrior 中的.prm 文件要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。

通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。

一个标准的基于XS128的.prm文件起始内容如下:.prm文件范例:NAMESENDSEGMENTSRAM =READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;ROM_4000 =READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FF F;ROM_C000 =READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEF F;//OSVECTORS =READ_ONLY 0xFF10 TO 0xFFFF;EEPROM_00 =READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000B FF;EEPROM_01 =READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010B FF;EEPROM_02 =READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO 0x020B FF;EEPROM_03 =READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO 0x030B FF;EEPROM_04 =READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO 0x040B FF;EEPROM_05 =READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO 0x050B FF;EEPROM_06 =READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO 0x060B FF;EEPROM_07 =READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO 0x070B FF;PAGE_F8 =READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BF FF;PAGE_F9 =READ_ONLY DATA_FAR IBCC_FAR 0xF98000 TO 0xF9BF FF;PAGE_FA =READ_ONLY DATA_FAR IBCC_FAR 0xFA8000 TO 0xFAB FFF;PAGE_FB =READ_ONLY DATA_FAR IBCC_FAR 0xFB8000 TO 0xFBB FFF;PAGE_FC =READ_ONLY DATA_FAR IBCC_FAR 0xFC8000 TO 0xFCB FFF;PAGE_FE =READ_ONLY DATA_FAR IBCC_FAR 0xFE8000 TO 0xFEBF FF;ENDPLACEMENT_PRESTART,STARTUP,ROM_VAR,STRINGS,VIRTUAL_TABLE_SEGMENT,//.ostext,DEFAULT_ROM, NON_BANKED,COPYINTO ROM_C000 ;OTHER_ROM INTO PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;//.stackstart,SSTACK,//.stackend,PAGED_RAM,DEFAULT_RAMINTO RAM;DISTRIBUTE DISTRIBUTE_INTOROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;CONST_DISTRIBUTE DISTRIBUTE_INTOROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;DATA_DISTRIBUTE DISTRIBUTE_INTORAM;//.vectors INTO OSVECTORS;ENDENTRIES//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart ENDSTACKSIZE 0x100VECTOR 0 _Startup//VECTOR 0 Entry//INIT Entry1 .prm文件组成结构按所含的信息的不同.prm文件有六个组成部分构成,这里仅讨论和内存空间映射关系紧密的三个部分,其他的不做讨论。

飞思卡尔8位单片机MC9S0813程序LCD编程C语言程序例

飞思卡尔8位单片机MC9S0813程序LCD编程C语言程序例
*功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 *
*参 数:无 *
*返 回:无 *
*-----------------------------------------------------*/
void LcdInit(void)
{
unsigned char i;
LcdData_D=0b11111111; //数据口为输出
Lcd_Command(0b00010100); //光标右移一个字符位,AC自动加1
Lcd_Command(0b00001100); //开显示,关光标显示,不闪烁
}
/*Lcd_Command:执行给定的cmd命令------------------------*
*功 能:执行给定的cmd命令,且延时 *
LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
LcdCtrl&=~(1<<LcdRW);
Lcd_Command(0b10000000); //后7位为DDRAM地址0x00
LcdCtrl|=1<<LcdRS;//RS、R/W=10,写数据到DDRAM中
LcdCtrl&=~(1<<LcdRW);
LcdData=cmd;//把指令码送到Lcd数据传送口
LcdCtrl|=(1<<LcdE); //Lcd开始接收数据
asm("NOP");
asm("NOP");
asm("NOP");
LcdCtrl&=~(1<<LcdE); //Lcd结束接收数据

飞思卡尔智能车dg128单片机控制程序代码

飞思卡尔智能车dg128单片机控制程序代码
}
void AD_Init(void)
{
ATD0CTL2=0xC0; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x44; //每次转换8个序列, FIFO, Freeze模式下继续转
ATD0CTL4=0x02; //10位精度, 采样时间为2个AD时钟周期,ATDClock=4MHz
//设置舵机
PWMCTL_CON01=1; //使得通道0,1成为16位pwm
PWMPER0 =0x75;
PWMPER1 =0x30; //舵机的频率是: 24M/8/30000=100Hz,T=10ms
PWMDTY01=4500; // 对应为4500/30000的占空比,待调整
Infrared_detect();
data_handle();
motor_ctl();
steer_ctl();
}
}
void interrupt 26 MDC_ISR(void)
{
static unsigned int number_count=0; static unsigned int start=0; static
go=2;
if(begin>=150)
go=3;
}
}
}
//-----系统初始化-----------------------
void system_init(void) //system initiat
void speed_ctl(void); //速度控制
void motor_ctl(void); //电机控制
void PACBInit(void);

飞思卡尔HC(S)08系列单片机开发及C语言编程简介

飞思卡尔HC(S)08系列单片机开发及C语言编程简介

1.CodeWarrior中建立新项目运行CodeWarrior(CW)集成开发平台,如图1-1所示在File菜单下点击New,弹出建立新项目的模板对话框,见图1-2。

一般的简便做法是在图1-2对话框左面的选择列表中选择“HC(S)08 New Project Wizard”,然后在右面的项目名“Project Name”输入条中,输入你要建立的新项目名字,再在“Location”一栏中用确定项目存放的文件夹路经,完成后按“OK”进入下一步。

你也可以在图1-2对话框左侧列表中选择“Empty Project”,这样生成的项目不包含任何文件,你必须在CodeWarrior中自己添加所有相关的文件内容。

我想除非有特殊理由,实际项目开发过程中很少采用这种麻烦的方式来建立自己的项目。

接下去是选择项目开发所用的编程语言,见图1-3。

最常用的当然是C语言编程。

有时因具体项目要求,除了C编程外还需要编写独立的汇编语言模块,那就再加选汇编工具(Assembly)。

C++编程在免费版和标准版CW下都不支持,只有在专业版下才可以使用。

编程语言选择完毕后按“Next”。

图1-1图1-2图1-3这时将出现如图1-4的对话框,让你选择项目开发对应的MCU 型号。

在CW5.x 版本下支持几乎所有的HC08和大部分HCS08单片机型号。

在最新的CW6.x 中,增加了飞思卡尔最低端的8位机(RS08系列)和低端32位处理器(Coldfire V1系列)的支持,但HC08系列的有些型号没有被包含在内。

由于HC08为比较老的产品系列,已经不推荐在新项目设计中选用,因此影响不会太大。

对于新用户来说,请尽量直接安装CW6.x 或以后推出的更新版本。

以典型的9S08系列为例,当你选择了一个MCU 型号后,在图1-4右侧会显示出所有针对该型号芯片可用的项目调试场景。

其中:∙ “Full Chip Simulator ”是芯片全功能模拟仿真,即无需任何目标系统的硬件资源,直接在你的PC 机上模拟运行单片机的程序,在模拟运行过程中可以观察调试程序的各项控制和运行流程,分析代码运行的时间,观察各种变量,等等。

飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM 8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL可得40M总线时钟。

9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC 端的COM口上去。

1飞思卡尔8位单片机MC9S08JM60开发板实践教程-60页word资料

1飞思卡尔8位单片机MC9S08JM60开发板实践教程-60页word资料

第一章搭建实验环境1、实验电路板及下载器实物图片2、实验电路图本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。

CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍)图1-3实验资源部分电路图1-4LCD串口1602液晶电路图1-5RS232接口电路图1-6数码管显示电路图1-7发光管、ad转换以及按键电路图1-83、集成开发软件环境的建立1〉运行文件CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及简化32位)单片机集成开发环境codewarrior6.3版本2〉运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下a>C:\Program Files\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件;b>C:\Program Files\pgo\USBDM4.7.0\USBDM_Drivers\Drivers下有下载器的usb驱动.因此在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。

3〉运行USBDM_4_7_0i_Win之后,还会在目录:C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior集成开发环境下对usb下载器的调试、下载的支持。

4、C语言编程基础第二章 LED闪烁程序编写过程1、新建工程运行单片机集成开发环境codewarrior IDE出现如下界面●Create New Project :创建一个新项目工程●Load Example Project :加载一个示例工程●Load Previous Project :加载以前创建过的工程●Run Getting started Tutorial:运行CodeWarrior软件帮助文档●Start Using CodeWarrior:立刻使用CodeWarrior点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08 Open Source BDM。

飞思卡尔IIC的24c02程序

飞思卡尔IIC的24c02程序

本程序是HCS系列都可以本人已通过实验下面是程序代码/*****************头文件*****************************************/#include <hidef.h> /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#include "iic24c02.h"/*********************延时函数************************************/ void delay(void){byte i;i=8;while(i>0){i--;}}/*********************ICC初始化************************************/ void Init_IIC(void){SOPT1_IICPS=0; //IIC 在PTA引脚上// IICF=0x0d; //设置波特率<100kbps// IICF=0X4B;IICF=0X24;IICC_IICEN=1;//使能IICIICC_TXAK=0; //当接收完一字节数据产生确认位IICC_IICIE=0;//禁止中断// IICA=0x38;}/*********************写函数************************************/void WRITE_IIC(uchar addres,uchar date){byte temp;IICC_IICEN = 0;IICC_IICEN = 1; //使能IICtemp = IICS; //清中断IICS_IICIF = 1;IICC_MST=0;IICS_SRW=0;IICC_TX=1; //写使能IICC_MST=1; //设为主模式delay();IICD=0xA0; //发送芯片地址,写命令while(!IICS_IICIF );temp = IICS;IICS_IICIF=1;IICD=addres; //发送寄存器地址while(!IICS_IICIF);temp = IICS;IICS_IICIF=1;IICD=date;//写第1个字节while(!IICS_IICIF);temp = IICS;IICS_IICIF=1;IICC1_TX=0;IICS_SRW=0;IICC1_MST=0;}/*********************读一个字节************************************/byte IIC_read_one_byte(byte address){byte temp;IICC_RSTA=0;IICC_IICEN = 0;IICC_IICEN = 1; //使能IICtemp = IICS; /* Clear any pending interrupt */IICS_IICIF = 1;IICC1_MST=0;IICS_SRW=0;IICC_TX=1; //写使能IICC_MST=1; //置为主模式delay();IICD=0xA0; //发送芯片地址,写命令while(!IICS_IICIF);temp = IICS;IICS_IICIF=1;IICD=address; //发送寄存器地址while(!IICS_IICIF);temp = IICS;IICS_IICIF=1;IICC_TXAK=1;IICC_RSTA=1; //重新启动IICD=0xA1; //读命令while(!IICS_IICIF);temp = IICS;IICS_IICIF=1;IICC_TX=0; //读使能temp=IICD;while(!IICS_IICIF);temp = IICS;IICS_IICIF=1;temp=IICD; //读一个字节IICC_MST=0;delay();return(temp);}。

飞思卡尔系列中DZ60单片机SPI应用程序

飞思卡尔系列中DZ60单片机SPI应用程序

//接受 1 个 8 字节数据函数
char STAT,CHR; STAT=SPIS; if(STAT&0x10) renturn 0x10; else CHR=SPID; return CHR;
}
/* */
//读 SPIS 状态寄存器 //00100000 进行位与,SPIS_MODF 为 1 说明模式错误 //返回错误信息
//若使 TLE7231G 工作在休眠模式,则 RESET 引脚送
*/
/*
初始化 TLE7231
*/
/*
TLE7231G 输入输出数据协议:
SI--输入寄存器
SI_DATA:BIT7BIT6 BIT5BIT4 BIT3BIT2 BIT1BIT0 //输入数据字节
IN3
IN2
IN1
IN0 -----INn 指第 n 通道的模式
0 1 1--------------------------------4
1 0 0--------------------------------5
1 0 1--------------------------------6
1 1 0--------------------------------7
| | |--------------------------------SPI 发送中断使能
||
0:禁止从 SPTEF 中中断(使用
轮询)
||
1:当 SPTEF 为 1 时,请求硬件
中断
| |-------------------------------------SPI 系统使能
|
0:SPI 系统禁止
0:在等待模式中,SPI 时钟继

pwm(飞思卡尔单片机)

pwm(飞思卡尔单片机)
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
/*************************************************************/
REFDV = 0x01; //时钟分频寄存器
//锁相环产生的时钟频率f=2*foscclk*(SYNR+1)/(REFDV+1)
//对于S12DG128 16MHz外部晶体振荡器,总线时钟为24MHz
//片内系统时钟为48MHz
while((CRGFLG & 0x08) !=0x08); /*等待锁相环频率锁定*/
PWMPER01 = 5000; //通道01的周期为4Hz
PWMPER23 = 5000; //通道23的周期为1Hz
PWMDTY01 = 3500; //通道01的占空比为70%
PWMDTY23 = 1500; //通道23的占空比为70%
PWME_PWME1 = 1; //使能通道01
PWME_PWME3 = 1; //使能通道23
}
void main(void) {
DisableInterrupts;
MCUInit();
init_pwm();
DDRB=1;
PORTB=1;
EnableInterrupts;
foபைடு நூலகம்(;;)
{
}
}
void init_pwm(void)
{
PWMCTL_CON01= 1; //联结通道0,1为16位的PWM

飞思卡尔MC9S12单片机实验程序

飞思卡尔MC9S12单片机实验程序
DDRB=0xff; //B口用于输出脉冲值
PORTB=0xff; //led灯全暗
TIOS=0x00; //设置定时器通道0为输入捕捉
TSCR1=0x80; //定时器使能
TSCR2=0x01; //设置自由计数器2分频,且禁止定时器溢出中断
TCTL4=0x02; //捕捉器仅下降沿捕捉
TIE=0x01; //允许定时器通道0的中断
}
}
void main(void) {
DDRB=0xff;
PORTB=0x00;
for(;;)
{
fun();
}
}
SCI
#include <hidef.h>
#include <mc9s12db128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12db128b"
unsigned char pp=0xf0; //欲发送的数字
/*********串口初始化*********/
void init() {
DDRB=0xff;
PORTB=0xff; //开始led灯暗,即数据尚未接收
SCI0BD=52; //初始化波特率为9600
SCI0CR1=0x00; //八位无奇偶校验模式
SCI0CR2=0x2c; //接收中断允许
}
/**************写数据***********/
void interrupt 20 funck() {
unsigned char k;
k=read();
PORTB=~k;
}
SPI
不会,以后补充。
LED
#include <hidef.h> /* common defines and macros */

飞思卡尔8位单片机MC9S08JM60开发板实践教程

飞思卡尔8位单片机MC9S08JM60开发板实践教程

第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。

这控制总线频率。

00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。

1 选择1MHz到16MHz外部振荡器的频率范围。

(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。

(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。

1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。

0 FLL(或PLL)在忽略模式中为无效的。

[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。

飞思卡尔8位单片机MC9S0813程序LCD编程汇编程序例

飞思卡尔8位单片机MC9S0813程序LCD编程汇编程序例

13.3.1 LCD编程汇编程序例
(1)LCD编程汇编子程序
(2)LCD编程汇编主程序
(3)PC 机方程序
PCJ 机部分主要功能是输入要在单片机板的液晶屏上显示的32个字符,然后以串行通信方式发向单片机,单片机接收此组字符在液晶屏上显示出来。

下面给出PC 机方程序。

PC 机方操作界面见图13-5。

可在图中的输入框中输入要显示的字符,仅限于可显示字符,以便与LCD 模块内部字符编码相一致,LCD 才能正确显示。

数据输入后,单击“发送数据”按钮,数据从串行口发向单片机,则LCD 上显示相应字符。

可以重复操作。

图13-5 LCD 实验程序PC 机方操作界面。

飞思卡尔单片机的程序

飞思卡尔单片机的程序

#include "derivative.h"//-----------------------------------------------------static void SCI_Init(void){SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enableSCI0BDH=0x00; //busclk 8MHz,19200bps,SCI0BDL=0x1aSCI0BDL=0x68; //SCI0BDL=busclk/(16*SCI0BDL)//busclk 8MHz, 9600bps,SCI0BDL=0x34//busclk 8MHz, 9600bps,SCI0BDL=0x68//busclk 24MHz, 9600bps,SCI0BDL=0x9C} //busclk 32MHz, 9600bps,SCI0BDL=0xD0//busclk 40MHz, 9600bps,SCI0BD =0x104//-----------------------------------------------------static void Port_Init(void){DDRA = 0xff; //LCD1100,PA0--4,PA67 D1D2PORTA= 0x00;DDRB = 0xff; //LED PTB0--7,PORTB= 0xff; //LEDs onDDRE = 0xFF; //MOTOR CONTROLPORTE= 0x00; //PDDRH = 0x00; // PORTH inputPTIH = 0X00; // KEY,PH0--5PERH = 0xff; // PORTH pull upPPSH = 0x00; // Port H Polarity Select Register-falling edgePIEH = 0x02; // PORTH interrut disable but 1,DDRJ = 0X01; // PJ0判断行同步脉冲到达//PPSJ = 0x01; // Port J Polarity Select Register-rising EDGEPPSJ = 0x00; // Port J Polarity Select Register-falling EDGEPIEJ = 0X00; // VIDEO SYNC INTERRUPT DISABLED,BUT NOT IN MAIN() PERJ = 0xff;DDRP = 0xff;PERP = 0xff;PTP_PTP0 = 0;}//-----------------------------------------------------static void PWM_Init(void){//SB,B for ch2367//SA,A for ch0145PWMPRCLK = 0X55; //clockA,CLK B 32分频:500khzPWMSCLA = 0x02; //对clock SA 进行2*PWMSCLA=4分频;pwm clock=clockA/4=125KHz;PWMSCLB = 0X02; //clk SB=clk B/(2*pwmsclb)=125KHZ//pwm1PWMCNT1 = 0;PWMCAE_CAE1=0;PWMPOL_PPOL1=0;PWMPER1 =125;PWMDTY1 =100;PWMCLK_PCLK1 = 1;PWME_PWME1 = 0;}void AD_Init(void){A TD0CTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:chA TD0CTL2=0x40; //禁止外部触发, 中断禁止A TD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转A TD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]A TD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换,4:1多通道轮流采样A TD0DIEN=0x00; //禁止数字输入}//-----------------------------------------------------//IOC7/PT7用于计算CS3144产生的脉冲数static void IOC_Init(void){TCTL3=0xc0;//c-输入捕捉7任何沿有效,TCTL4=0xc0;//40表示ICx禁止, 1表示上升沿, 2表示下降沿, 3表示任何沿TIE =0x00;//每一位对应相应通道中断允许,0表示禁止中断TIOS =0x00;//每一位对应通道的: 0输入捕捉,1输出比较TCTL3_EDG7x=1;//c-输入捕捉7任何沿有效,}//产生40ms的定式中断,读取IOC7的计数值static void Timer_Init(void){//TSCR1=0X80;//TIMER INT ENABLED//TSCR1=0x90;//计数器使能TEN|快速清零TFFCATSCR1=0X00; //禁止TIM//TSCR2=0X80;//DIV 1->2.5ms,enable time overflow interrrupt//TSCR2=0X82;//DIV 4->10ms//TSCR2=0X83;//DIV 8->20ms//TSCR2=0X84;//DIV 16->40msTSCR2=0X85;//DIV 32->80ms//TSCR2=0X86;//DIV 64->160ms//TSCR2=0X87;//DIV 128->320ms,enable time overflow interrruptTCNT =0; //PACTL=0X50; //PT7 PIN,PACN32 16BIT,FALLing edge,NOT INTERRUPT //PBCTL=0X40;//PBCN10 16BIT,INT DISABLED//ICPAR=0; //8BIT DISABLED}//-----------------------------------------------------// setup of the RTI interrupt frequencystatic void RTI_Init(void){//RTICTL=0x10; //2^10x40ms=4.96s//RTICTL=0X74; //SET PRESCALER,div rate=(m+1)x2^(n+9),(m=1-7,n=0-15)//tick=16Mhz/((4+1)x2^(7+9))=48.83,(/sec)//16000000/64k=244.140625 ,与晶振频率相关,与分频无关RTICTL=0x77; //8x2^16 =>32,75ms,30.5175Hz//RTICTL=0x7f; //16x2^16 =>,65.536ms,15.26Hz//RTICTL=0x1F; //16x2^10--1ms//CRGINT=0X80; //enable RTI InterruptCRGINT=0X00; //disable RTI Interrupt}static void Time_Start(void){RTI_Init();CRGINT=0X80; //enable RTI Interrupt}//-----------------------------------------------------// PLL初始化子程序BUS Clock=16Mvoid setbusclock(void){CLKSEL=0X00; // disengage PLL to systemPLLCTL_PLLON=1; // turn on PLLSYNR=0x00 | 0x01; // VCOFRQ[7:6];SYNDIV[5:0]// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)// fPLL= fVCO/(2 × POSTDIV)// fBUS= fPLL/2// VCOCLK Frequency Ranges VCOFRQ[7:6]// 32MHz <= fVCO <= 48MHz 00// 48MHz < fVCO <= 80MHz 01// Reserved 10// 80MHz < fVCO <= 120MHz 11REFDV=0x80 | 0x01; // REFFRQ[7:6];REFDIV[5:0]// fREF=fOSC/(REFDIV + 1)// REFCLK Frequency Ranges REFFRQ[7:6]// 1MHz <= fREF <= 2MHz 00// 2MHz < fREF <= 6MHz 01// 6MHz < fREF <= 12MHz 10// fREF > 12MHz 11// pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV)// If POSTDIV = $00 then fPLL is identical to fVCO (divide by one)._asm(nop); // BUS CLOCK=16M_asm(nop);while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;CLKSEL_PLLSEL =1; //engage PLL to system;}//-----------------------------------------------------#pragma CODE_SEG DEFAULTvoid Init_Dev(void){setbusclock();Port_Init();SCI_Init();PWM_Init();AD_Init();Timer_Init();Time_Start();IOC_Init();}//-----------------------------------------------------。

(整理)飞思卡尔8位单片机MC9S08JM60开发板实践教程

(整理)飞思卡尔8位单片机MC9S08JM60开发板实践教程

第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。

这控制总线频率。

00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。

1 选择1MHz到16MHz外部振荡器的频率范围。

(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。

(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。

1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。

0 FLL(或PLL)在忽略模式中为无效的。

[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。

飞思卡尔8位单片机MC9S0813LCD与LED编程

飞思卡尔8位单片机MC9S0813LCD与LED编程
13.2 点阵字符型LCD的接口特性
③ 16×2(每行16个字符,共 2行)
字符位置 1 2 ...... 8 9 10 ...... 16 第一行地址 00 01 ...... 07 08 09 ...... 0F 第二行地址 40 41 ...... 47 48 49 ...... 4F
④ 16×4(每行 16个字符,共 4行)
(10)写数据到DDRAM或CGRAM(Write Data to DDRAM
or CG RAM)
RS、R/=10,DATA= 实际数据。 该指令根据最近设置的地址,将数据写入 DD
RAM 或CG RAM 中。实际上,数据被直接写入 DR,再由内部操作写入地址指针所指的 DD RAM 或CG RAM 。运行时间 (250KHz):40 μs。
E
DB0~ DB3
DB4~ DB7
E1 ~E2
电平
H/L H/L H/L H→L
方向
引脚含义说明
电源地
电源 (+5V)
液晶驱动电源( 0~5V)
输入
寄存器选择; 1-数据寄存器 0- 数据寄存器
输入
读写操作选择: 1-读操作 0- 写操作
输入
使能信号: 效
R/W
=0 ,E 下降沿有效 ,
R/W=1 ,E=1 有
(3)输入方式设置(Entry Mode Set )
RS、R/=00,DATA=0000 00AS。该指令设置光标、画面的移动方 式。下面解释 A 、S位的含义。 A=1: 数据读写操作后, AC 自动增 1; A=0: 数据读写操作后, AC自动减1。S=1:当数据写入 DD RAM显示将 全部左移( A=1)或全部右移 (A=0),此时光标看上去未动,仅仅是显 示内容移动,但从 DD RAM中读取数据时,显示不移动; S=0:显示不 移动,光标左移(A=1)或右移(A=0)。

单片机飞思卡尔PIT模块.

单片机飞思卡尔PIT模块.
周期中断定时器(PIT)
• • • • • 定时器简介 周期中断定时器简介(PIT) 周期中断定时器寄存器 PIT模块编程范例 时钟产生器模块
定时器简介 ——为什么使用定时器
时间延迟的产生和测量
外部信号周期和脉冲宽度的测量 事件计数器 事件发生时间比较器 波形发生器 周期性的中断产生 定时器实际上是计数器,它通过累计已知时间间隔的个数来 计算时间。被累计的时间间隔若是系统时钟,计数器就变成了定 时器。
1 时钟频率已稳定,锁相环频率已锁定 0 时钟频率未稳定,锁相环频率未锁定
时钟产生器模块 ——寄存器
5、时钟选择寄存器(CLKSEL)
地址:$39
PLLSEL:选定锁相环位 1 Bus Clock=PLLCLK/2 0 Bus Clock=OSCCLK/2
6、预分频寄存器POSTDIV
地址:$
POSTDIV[4..0] :预分频因子。POSTDIV 为默认时(后四位全0),fvoc =fpll。
定时器简介 ——怎样获得定时器
程序设计软件定时器
void delay(void) { unsigned int i,j; for(i=0;i<10;i++) for(j=0;j<10000;) j++; }
微处理器常常内置定时器(硬件定时器)
–MCS51单片机内有二个16位定时器、计数器 –MC9S12XS内置 RTI ( Real Time Interrupt) ECT – enhanced capture timer OC – Output comparer PWM – Pulse width modulationPeriod and pulse width measurement 四个24位PIT定时器
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PTT=0x0f;
for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++)
{
PTP=DisplayDecode[showdata[DisplayNumber]];
if(DisplayNumber==2) PTP&=0x7f;
unsigned char i;
Keyvalue1=0xFF;
Output=0xF0;
PORTA=Output;
Input=PORTA>>4;
if(Input!=0x0F)
{
delay(4);
Input=PORTA>>4;
if(Input!=0x0F)
const unsigned char DisplayDecode[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,
~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71};
const unsigned char KeyDecode[]={ 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x0a,0x0b,
{
case 0x0E:
Keynumber=0;
break;
case 0x0D:
Keynumber=1;
break;
case 0x0B:
showdata[0]=1;
showdata[1]=2;
showdata[2]=3;
showdata[3]=4;
EnableInterrupts;
Init_PORT();
Show();
for(;;)
{
Keyresult=KeyScan(); //键盘扫描
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define RowSize 4
#define ColumnSize 4
6 BKPUE
5 0
4 PUPEE
3 0
2 0
1 PUPBE
0 PUPAE
*/
PUCR|=0x01;
DDRB=0xFF;//输出
DDRP=0xFF;
DDRT=0xFF;
}
void delay(unsigned int countert)
if(Keyresult!=0xFF) //showdata[0]=Keyresult;
PORTB=~Keyresult;
Show(); //显示
}
}
{
unsigned int i,j;
for(i=0;i<countert;i++)
for(j=0;j<4000;) j++;
}
unsigned char KeyScan()
{
unsigned char Input,Output,Keynumber,Keyvalue1;
0x0c,0x0d,0x0e,0x0f};
unsigned char showdata[4];
void Init_PORT() {
DDRA=0x0F;//输出
/*Ports ABEK, BKGD pin Pull-up Control Register (PUCR)
7 PUPKE
switch(DisplayNumber)
{
case 0:
PTT=0xfe;
break;
case 1:
PTT=0xfd;
break;
case 2:
PTT=0xfb;
break;
{
Output=0x01;
; for(i=0;i<RowSize;i++)
{
PORTA=~Output;
Input=PORTA>>4;
if(Input!=0x0F)
{
switch(Input)
Keynumber=2;
break;
case 0x07:
Keynumber=3;
break;
}
Keynumber=Keynumber+i*ColumnSize;
Keyvalue1=KeyDecode[Keynumber];
break;
}
else Output<<=1;
ห้องสมุดไป่ตู้ }
}
}
return(Keyvalue1);
}
void Show()
{
unsigned char DisplayNumber;
default:
PTT=0xf7;
break;
}
delay(1);
}
}
void main(void)
{
/* put your own code here */
unsigned char Keyresult;
相关文档
最新文档