📄 controller.h
字号:
#include "register.h" // 引用头部文件
#include "ioports.h"
void sytem_initial(); // 声明在程序中需要用到的函数
void pwm_initial(); // pwm初始化函数
void sci_initial(); // sci初始化函数
void io_initial(); // io 初始化
void s_switch(); // 模拟输入切换函数
void sci_send(); // sci发送函数
void delay(int k); // 延迟函数
int s_flag=1; // 模拟输入通道标志位
int sci_data=0; // sci发送数据
main()
{
int i;
sytem_initial(); // 系统初始化程序
io_initial(); // IO初始化
pwm_initial(); // PWM初始化程序
sci_initial(); // sci初始化程序
asm(" clrc INTM"); // 中断使能
while(1)
{
delay(10000);
sci_send();
}
}
void sytem_initial()
{
asm(" setc INTM"); // 禁止所有中断
asm(" setc SXM"); // 符号扩展有效
asm(" clrc OVM"); // 结果正常溢出
asm(" clrc CNF"); // 双端口RAM映射到数据存储空间
*SCSR1=0x834E; // LOCK引脚输出CPU时钟,IDLE1模式
// 2倍频,禁止ADC,CAN,SPI,使能EVA,EVB,SCI
*WDCR=0x00E8; // 禁止看门狗
*XINT1CR=0X8007; // 外部中断1使能,低优先级, 下降沿产生中断
*IMR=0x00FF; // 开所有中断
*IFR=0xFFFF; // 清中断标志位
}
void pwm_initial()
{
*MCRA=*MCRA|0X0FC7; // 配置为基本功能方式,PWM1-6,SCI,INT1
*MCRC=*MCRC|0X007F; // 配置为基本功能方式,PWM7-12
*ACTRA=0X0666; // PWM1,3,5高有效,2,4,6低有效
*ACTRB=0X0666; // PWM7,9,11高有效,8,10,12低有效
*DBTCONA=0X0000; // 不使能死区控制
*DBTCONB=0X0000; // 不使能死区控制
*CMPR1=0X2000; // 设置比较寄存器
*CMPR2=0X5000;
*CMPR3=0X8000;
*CMPR4=0X3000;
*CMPR5=0X6000;
*CMPR6=0X9000;
*T1PER=0XA000; // 设置定时器1的周期寄存器
*T3PER=0XA000; // 设置定时器3的周期寄存器
*COMCONA=0X8200; // 使能比较操作
*COMCONB=0X8200; // 使能比较操作
*T1CON=0X9540; // 定时器1为连续增计数模式, 使能定时器1,1 分频
*T3CON=0X9540; // 定时器3为连续增计数模式, 使能定时器3,1 分频
*EVAIFRA=0XFFFF ; // 清EVA中断标志
*EVAIMRA=0XFFFF; // 使能所有EVA中断
*EVBIFRA=0XFFFF; // 清EVB中断标志
*EVBIMRA=0XFFFF; // 使能所有EVB中断
}
void sci_initial()
{
*MCRA=*MCRA|0X0003; // 配置为SCI 引脚功能
*SCICCR=0X0007; // 一个停止位,禁止校验,禁止自测试,
// 空闲线模式,8位字符长度
*SCICTL1=0X0003; // 禁止接收错误中断,软件复位,没有选定的发送特征
// 禁止休眠方式,使能发送和接收
*SCICTL2=0X0002; // 禁止发送中断,使能接收中断
*SCIHBAUD=0X0002;
*SCILBAUD=0X0008; // 波特率9600
*SCIPRI=0X0008; // 高优先级中断,不受仿真挂起影响
*SCICTL1=0X0023; // 脱离复位状态
}
void sci_send()
{
*SCITXBUF=sci_data;
sci_data++;
}
void delay(k)
{
for(;k>0;k--);
}
void interrupt pwm_interrupt() // pwm 和sci中断入口程序
{
*EVAIFRA=0XFFFF; // 清EVA中断标志
*EVBIFRA=0XFFFF; // 清EVB中断标志
asm(" clrc INTM");
return;
}
void interrupt sci_interrupt()
{
if(((*PIVR)==0X0006)&&((*SCIRXST&0X0040)==0X0040))
{ // SCI 接收中断
*CANMDER=0X0000; // 邮箱不使能
*CANMCR=*CANMCR|0X0100; // CDR=1,数据改变请求
*CANMBX3A=*SCIRXBUF; // 更新邮箱3中的数据
*CANMBX3B=*SCIRXBUF;
*CANMCR=0X2680; // 数据字节0...7,正常工作模式
*CANMDER=0X004C; // 邮箱3发送, 邮箱2接收,使能邮箱2,3
}
asm(" clrc INTM");
return;
}
void io_initial()
{
*MCRB=*MCRB & 0XFFE3; // iopc2,3,4 配置为io 口.
*MCRC=*MCRC & 0XE0FF; // iopf0,1,2,3,4 配置为io 口.
*PCDATDIR=0X7878;
*PFDATDIR=0X1F1F;
}
void interrupt xint_interrupt() // 外部中断入口程序
{
asm(" clrc INTM");
return;
}
void interrupt nothing() // 假中断程序
{
asm(" clrc INTM");
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -