有大神会把51单片机的程序转成MSP430的么
时间:10-02
整理:3721RD
点击:
/*----------单片机中断定时小程序----------*/
/*----------2014-05-07--------------------*/
/*----------STC12C5A16S2------------------*/
#include <intrins.h>
#include <STC12C5A.h>
/*---------------端口定义----------------*/
sbit TEST_OUT0 = P0^5;
sbit TEST_OUT1 = P0^4;
sbit TEST_OUT2 = P0^3; //可以根据需要增加更多的端口
sbit SW = P3^2;
/*---------------常量定义----------------*/
#define FOSC 29491200L //这个数值取决于所选用的晶振频率
#define MODE1T //定时器时钟模式1 声明则是12T模式,不声明是1T模式
#ifdef MODE1T
#define T1MS (65536-FOSC/500000)//1T模式中10us定时器计数量
#else
#define T1MS (65536-FOSC/12/500000)//12T模式中10us定时器计数量
#endif
/*---------------变量定义---------------*/
int count = 100000;
int n = 0;
/*---------------延时函数---------------*/
static void Delay(unsigned int s)
{
unsigned int i;
for(i=0;i<s;i++);
for(i=0;i<s;i++);
}
/*---------------中断0------------------*/
void exint0() interrupt 0
{
ET0 = 1; //开启定时器0中断
Delay(500); //做延时
if(SW == 0)
{
SW = 1;
TEST_OUT0 = !TEST_OUT0; //灯亮
//TEST_OUT1 = !TEST_OUT1;
n = 0; //计数值重设为0
}
}
/*---------------Timer0中断-------------*/
void tm0_isr()interrupt 1 using 1
{
TL0 = T1MS;
TH0 = T1MS>>8;
if(count-- == 0)
{
TEST_OUT0 = !TEST_OUT0; //这里只写了一个端口的操作,根据需要可以自行增加
//TEST_OUT1 = !TEST_OUT1;
count = 100000;
}
n++;
while(n == 60) //是否满一分钟
{
n = 0;
TEST_OUT0 = 0; //灯灭
//TEST_OUT1 = 0;
TR0 = 0; //定时器0停止运行
ET0 = 0; //关闭定时器0中断
}
}
//---------------------------------
/*------------------主函数---------------------*/
void main()
{
//TEST_OUT1 = 1;
#ifdef MODE1T
AUXR = 0x80; //定时器0工作在1T模式
#endif
TMOD = 0x01; //设置定时器0为模式1(16bit)
TL0 = T1MS; //初始化定时器0低位
TH0 = T1MS>>8; //初始化定时器0高位
TR0 = 1; //定时器0开始运行
EA = 1; //开启全局中断开关
while(1); //循环
}
拜托了
/*----------2014-05-07--------------------*/
/*----------STC12C5A16S2------------------*/
#include <intrins.h>
#include <STC12C5A.h>
/*---------------端口定义----------------*/
sbit TEST_OUT0 = P0^5;
sbit TEST_OUT1 = P0^4;
sbit TEST_OUT2 = P0^3; //可以根据需要增加更多的端口
sbit SW = P3^2;
/*---------------常量定义----------------*/
#define FOSC 29491200L //这个数值取决于所选用的晶振频率
#define MODE1T //定时器时钟模式1 声明则是12T模式,不声明是1T模式
#ifdef MODE1T
#define T1MS (65536-FOSC/500000)//1T模式中10us定时器计数量
#else
#define T1MS (65536-FOSC/12/500000)//12T模式中10us定时器计数量
#endif
/*---------------变量定义---------------*/
int count = 100000;
int n = 0;
/*---------------延时函数---------------*/
static void Delay(unsigned int s)
{
unsigned int i;
for(i=0;i<s;i++);
for(i=0;i<s;i++);
}
/*---------------中断0------------------*/
void exint0() interrupt 0
{
ET0 = 1; //开启定时器0中断
Delay(500); //做延时
if(SW == 0)
{
SW = 1;
TEST_OUT0 = !TEST_OUT0; //灯亮
//TEST_OUT1 = !TEST_OUT1;
n = 0; //计数值重设为0
}
}
/*---------------Timer0中断-------------*/
void tm0_isr()interrupt 1 using 1
{
TL0 = T1MS;
TH0 = T1MS>>8;
if(count-- == 0)
{
TEST_OUT0 = !TEST_OUT0; //这里只写了一个端口的操作,根据需要可以自行增加
//TEST_OUT1 = !TEST_OUT1;
count = 100000;
}
n++;
while(n == 60) //是否满一分钟
{
n = 0;
TEST_OUT0 = 0; //灯灭
//TEST_OUT1 = 0;
TR0 = 0; //定时器0停止运行
ET0 = 0; //关闭定时器0中断
}
}
//---------------------------------
/*------------------主函数---------------------*/
void main()
{
//TEST_OUT1 = 1;
#ifdef MODE1T
AUXR = 0x80; //定时器0工作在1T模式
#endif
TMOD = 0x01; //设置定时器0为模式1(16bit)
TL0 = T1MS; //初始化定时器0低位
TH0 = T1MS>>8; //初始化定时器0高位
TR0 = 1; //定时器0开始运行
EA = 1; //开启全局中断开关
while(1); //循环
}
拜托了
该程序的功能:主要是有一个针头A输入高电平(大约3.0V左右)后,芯片检测到有高电平,则在另外的10个(源程序可能不满10个)针脚输出高电平(最好能闪烁输出),输出60秒后,
如果针脚A没有检测到高电平,则结束10个针脚的高电平(闪烁输出),进入等待状态。
如果针脚A检测到高电平,则继续让10个针脚输出高电平(闪烁输出)60秒。
源程序是51的程序,希望能改成MSP430 f5529的芯片程序,最好能标注出哪一个针脚输入高电平,哪10个针脚输出高电平
代做 1002925094