下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一串口通讯实验一、实验目的了解MC9SXS128片机串行通讯模块、AD模块、PWM1块原理,并掌握使用。二、实验内容利用单片机自带的两个串行通讯口 SCI0和SCI1,采集电位计电压值,SCI0 串口查询发送AD采集值至SCI1, SCI1读取数据,通过PWMI块实现LED灯亮度 无极调节。三、实验原理图LEDPlP2Ikader 2Header 1ADOS四、实验源程序#include <hidef.h>#include <stdio.h>32000000/总线频率16000000晶振频率/波特率#include "derivative.h"#
2、define BUS_CLOCK#define OSC_CLOCK#define BAUD 9600主控板上LED灯#define LEDCPU PORTK_PK4#define LEDCPU_dir DDRK_DDRK4#define LED_ON吊#define LED_OFF 1 unsigned char AD;unsigned char data_receive;unsigned int a=0; 串口接收指示灯/函数初始化void INIT_AD(void);unsigned char AD_capture(void);void INIT_PLL(void);/ 初始化锁相环voi
3、d init_pwm(void) ;/ 初始化 PWMvoid INIT_SCI(void); / 初始化串口void SCI0_send(unsigned char data);/ 串 口 发送程序unsigned char SCI1_receive(void); 串口接收函数/ 串口中断接收函数#pragma CODE_SEG _NEAR_SEG NON_BANKED / 中断函数置于非分页区内 void interrupt 21 receivedata(void)a+;data_receive= SCI1_receive();PWMDTY0=data_receive;if(a=1000)
4、a=0;LEDCPU=LEDCPU;#pragma CODE_SEG DEFAULT / 后续代码置于默认区域内void main(void)LEDCPU_dir=1; / 定义为输出LEDCPU=LED_ON;DisableInterrupts;INIT_PLL();INIT_AD();init_pwm();INIT_SCI();EnableInterrupts;while(1)AD=AD_capture();SCI0_send(AD);unsigned char SCI1_receive(void)if(!SCI1SR1_RDRF);/ 等待发送数据寄存器满/接收数据寄存器空标志位retu
5、rn(SCI1DRL); void INIT_SCI(void)SCI0BD = BUS_CLOCK/16/BAUD; 设置 SCI0 波特率为 9600SCI0CR1 = 0x00;设置SCI0为正常模式,八位数据位,无奇偶校验/10位数据异步传输, 1 位起始位,一位停止位, 8 位数据位SCI0CR2 = 0x2c;/ 允许接收和发送数据,允许接收中断功能SCI1BD = BUS_CLOCK/16/BAUD; /设置 SCI1 波特率为 9600SCI1CR1 = 0x00;/设置 SCI1 为正常模式,八位数据位,无奇偶校验/10 位数据异步传输, 1 位起始位,一位停止位, 8 位数
6、据位SCI1CR2 = 0x2c;/允许接收和发送数据,允许接收中断功能void INIT_PLL(void)CLKSEL &= 0x7f;PLLCTL &= 0x8F;CRGINT &= 0xDF;SYNR = 0x43;REFDV = 0x81;64MHz ,fbus=32MPLLCTL =PLLCTL|0x70;asm NOP;asm NOP;/set OSCCLK as sysclk/Disable PLL circuitPLLCLK=2 X OSCCLK(SYNR+1)/(REFDV+1)=/Enable PLL circuitwhile(!(CRGFLG&a
7、mp;0x08); /PLLCLK is Locked alreadyCLKSEL |= 0x80;/set PLLCLK as sysclkvoid INIT_AD(void)ATD0CTL2 = 0x40;/ 启动 A/D 模块,快速清零,禁止中断ATD0CTL1_SRES=0; / 选用 8 位模数转换ATD0CTL3 = 0x88;/ 每次只转换一个通道ATD0CTL4 = 0x07;/AD 模块时钟频率为2MHz unsigned char AD_capture(void)unsigned char AD_data;ATD0CTL5 = 0x08;/ 转换 AD08while(!AT
8、D0STAT0_SCF);AD_data = ATD0DR0L; return(AD_data); void init_pwm(void)PWMPOL_PPOL0= 1;/ 通道的极性为高电平有效PWMPRCLK = 0x22;/A 时钟和 B 时钟的分频系数为 4,频率为 8MHzPWMSCLA=0x04;/SA 时钟频率为1MHzPWMSCLB=0x04;/SB 时钟频率为1MHzPWMCLK= 0xFf;0 , 1,2, 3 用 SA 时钟;4, 5, 6, 7 用 SB时钟PWMCAE= 0x00;/ 脉冲模式为左对齐模式PWMPER0= 255;/通道0的周期为3.9KHzPWMDT
9、Y0= 0;/通道0的占空比设置PWME_PWME0=1;/ 使能PWM 信号 void SCI0_send(unsigned char data)while(!SCI0SR1_TDRE);/等待发送数据寄存器(缓冲器)为空/ 发送数据寄存器空标志位SCI0DRL = data;五、实验流程图六、实验总结串口 SCI0查询发送方式为死循环方式,未调节发送间隔时间,如果采用硬 件PIT定时中断发送或软件延时发送,则可调节发送间隔时间,效果更佳。实验二 液晶画点显示电压波形实验一、实验目的了解并掌握12864液晶屏、OLEDf显示原理,及MC9SXS12PIT模块、AD模 块使用及中断编写方式。二
10、、实验内容通过AD模块采集电位计电压值,实现12864液晶及OLEDW显示电压波形曲 线。三、实验原理图>- I 口 M MM ?p pOLED 宁接口 Header 6alVDBnKJ71pPAp_PAvcr|11' Gr4567 E g 1011 12 13 H1517 18 19 2CHeader 20H四、实验源程序1、12864液晶屏关键程序unsigned char gdram3232;unsigned char dianzhen128; 请空GDRAM void clear_gdram(void) 一unsigned char x,y;for(y=0;y<32
11、;y+)for(x=0;x<32;x+)gdramxy=0x00;设置为绘图模式void graph(void)write_command(0x36);delay20us(4);/ 画点,刷新gdramvoid draw_point(unsigned char x,unsigned char y)unsigned int vx,vy,by,temp;if(x>127|y>63)return;vy=x/8;by=x%8;if(y<=31)vx=31-y;vy=vy+16;elsevx=63-y;temp=1<<(7-by);gdramvxvy|=temp;/
12、更新 GDRAM 内容void lcd_refresh(void)unsigned char x,y;for(y=0;y<32;y+)for(x=0;x<16;x+)write_command(0x34);/ 关闭绘图模式write_command(y+0x80); / 行地址write_command(x+0x80); / 列地址write_command(0x30);write_Data(gdramy2*x);write_Data(gdramy2*x+1);/ 中断程序#pragma CODE_SEG _NEAR_SEG NON_BANKEDvoid interrupt 66
13、pit0(void)if(PITTF_PTF0 = 1)PITTF_PTF0 = 1;/ 清除标志位ad=AD_capture();y=ad/4;if(x<128)draw_point(x,y);dianzhenx=y;x+;elseclear_gdram();for(i=0;i<127;i+)dianzheni=dianzheni+1; draw_point(i,dianzheni);dianzhen127=y;draw_point(127,y);lcd_refresh();graph();LEDCPU=LEDCPU;#pragma CODE_SEG DEFAULT2、OLELW
14、关键程序unsigned char gram1288;/ 更新 GRAM 内容void Refresh_Gram(void)unsigned char i,n;for(i=0;i<8;i+)OLED_WrCmd(0xb0+i);OLED_WrCmd(0x00);OLED_WrCmd(0x10);for(n=0;n<128;n+)OLED_WrDat(gramni);/ 画点,刷新gramvoid Draw_Point(unsigned char x,unsigned char y)unsigned char pos,bx,temp=0;if(x>127|y>63)ret
15、urn;pos=7-y/8;bx=y%8;temp=1<<(7-bx);gramxpos|=temp;/ 清空 GRAMvoid Clear(void)unsigned char i,n;for(i=0;i<8;i+)for(n=0;n<128;n+)gramni=0X00;Refresh_Gram();/ 中断程序#pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt 66 pit0(void)if(PITTF_PTF0 = 1)PITTF_PTF0 = 1;/ 清除标志位ad=AD_capture();y=ad/4;
16、if(x<128)Draw_Point(x,y);x+;elsefor(j=0;j<8;j+)for(i=0;i<127;i+)gramij=grami+1j;for(i=0;i<8;i+)gram127i=0x00;Draw_Point(127,y); 一Refresh_Gram(); 一#pragma CODE_SEG DEFAULT五、实验流程图1、12864液晶屏程序流程图2、OLELW程序流程图六、实验效果1、12864液晶屏实验效果2、OLEDf实验效果七、实验总结12864液晶屏在画图模式中,更改 GDRAMfc据时,需要关闭画图模式而关闭 12864液晶
17、屏显示,在完成数据更改后再次显示,因屏幕自身性能限制,关闭显 示和再次开启过程的时间较长,所以ad采样率较低,曲线的连续性较差;而OLED 屏则克服了这一缺陷,采样率在较高情况下也可完整显示,曲线的连续性较好。实验三闭环控制节气门开度实验一、实验目的了解并掌握增量式PID算法,MC9SXS128 A模块、PWM1块、PIT模块原理 及使用。二、实验内容采集转把AD值和节气门AD<,通过增量式PID算法,输出PW0波驱动节 气门直流电机,调节节气门转动角度,使其随转把转动角度变化而变化。三、实验原理图|"GND节气门采集电路AD04转把AD采集电路模艮在口|-GND电机模块接口四
18、、实验源程序/* common defines and macros */* derivative-specific definitions */32000000/总线频率16000000晶振频率#include <hidef.h>#include "derivative.h"#include "OLED.h"#define BUS_CLOCK#define OSC_CLOCK unsigned char ad,ad04; int chazhi_old,chazhi=0; int sum,inc=0;float kp=0.025;float
19、ki=0.00002;int out=0;void INIT_AD(void)ATD0CTL2 = 0x40; 启动A/D模块,快速清零,禁止中断ATD0CTL1_SRES=0; /选用8位模数转换ATD0CTL3 = 0x88;/每次只转换一个通道ATD0CTL4 = 0x07; /AD 模块时钟频率为 2MHzunsigned char AD_capture(void)unsigned char AD_data;ATD0CTL5 = 0x03;/ 转换 AD03while(!ATD0STAT0_SCF);AD_data = ATD0DR0L; return(AD_data); unsign
20、ed char AD_capture_04(void)/ 摇杆 unsigned char AD_data;ATD0CTL5 = 0x04;/ 转换 AD04while(!ATD0STAT0_SCF);AD_data = ATD0DR0L;return(AD_data);void init_PIT(void)PITMTLD0=255; /为 0 通道 8 位计数器赋值PITLD0=400;/为 0 通道 16 位计数器赋值/(31+1)*(99+1)=16000000 个总线周期=100usPITMUX_PMUX0=0; / 第 0通道使用微计数器0PITCE_PCE0=1; / 第 0 通道
21、计数器工作PITCFLMT=0X80; / 使能周期中断定时器PITINTE_PINTE0=1; /0 通道定时器定时中断被使能 void INIT_PLL(void) CLKSEL &= 0x7f;/set OSCCLK as sysclkPLLCTL &= 0x8F;/Disable PLL circuitCRGINT &= 0xDF;SYNR = 0x43;REFDV = 0x81;PLLCLK=2 X OSCCLK (SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32MPLLCTL =PLLCTL|0x70; /Enable PLL circuitasm NOP;asm NOP;while(!(CRGFLG&0x08); /PLLCLK is Locked alreadyCLKSEL |= 0x80;/set PLLCLK as sysclkvoid init_pwm(void)PWMPOL_PPOL0= 1;/通道的极性为高电平有效PWMPOL_PPOL1= 1;/通道的极性为高电平有效PWMPRCLK = 0x22;/A 时钟和B 时钟的分频系数为4,频率为8MHzPWMSCLA=0x04;/SA时钟频率为1MHzPWMSCLA=0x04;/SB时钟频率为1M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化学氧化工岗中规章考核试卷含答案
- 第六章老人常见疾病的护理讲课文档
- 精神疾病护理理论与实践
- 特殊人群抗菌药物临床使用情况调查与分析
- 医学课件-咽鼓管的生理功能
- 医患关系中的患者需求关注
- 《UI设计-AIGC驱动赋能界面完美设计》课件 7.1 相关知识
- 耳穴贴压加中药内服治疗过敏性鼻炎
- 脑梗护理查房OSCE培训课件
- 医学课件-干燥综合症病人的健康指导
- DB32/T 4462-2023河道管理范围内建设项目防洪评价技术规程
- 教学设计与教案的区别
- 超纯水设备采购合同协议
- 鞋材面料知识培训课件
- 《网络安全技术》课件第1章
- 《食品原料学》课件-第一章 食品原料学研究与发展
- GB/T 21617-2023危险品固体氧化性试验方法
- 浙教版小学人·自然·社会四年级第25课 南宋都城 课件
- GB/T 8464-2023铁制、铜制和不锈钢制螺纹连接阀门
- 校园文明教育-主题班会课件
- 2021年江苏省普通高中学业水平合格性考试物理(样卷及答案)
评论
0/150
提交评论