STC12C4052部分调试成功的程序
来源:互联网 发布:窗帘 知乎 编辑:程序博客网 时间:2024/05/22 11:33
参考STC官方例程。
1、定时器程序。
/**********************
时间:2014年7月7日0:34:09地点:桂电
制作:天空之恋
说明:定时器0工作在16位计数模式。,硬件调试成功
时间:2014年7月28日12:59:52
在新的板子上面硬件调试成功
*******************/
#include <stc12c2052ad.h> //stc单片机专用的头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define FOSC 11059200L
#define T1MS (65536-FOSC/1000) //1ms timer calculation method in 1T mode
sbit led=P3^7;
uint count; //1000 times counter
/*void delay(uint t)
{
uint a,b;
for(a=0;a<t;a++)
for(b=0;b<110;b++);
} */
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
TL0 = T1MS; //reload timer0 low byte
TH0 = T1MS >> 8; //reload timer0 high byte
if (count-- == 0) //1ms * 1000 -> 1s
{
count = 1000; //reset counter
led =~led; //work LED flash
}
}
void main()
{
AUXR = 0x80; //timer0 work in 1T mode
TMOD = 0x01; //set timer0 as mode1 (16-bit)
TL0 = T1MS; //initial timer0 low byte
TH0 = T1MS >> 8; //initial timer0 high byte
TR0 = 1; //timer0 start running
ET0 = 1; //enable timer0 interrupt
EA = 1; //open global interrupt switch
count = 0; //initial counter
while (1); //loop
}
2、串口程序---学习单片机,必学串口程序,这对以后的设计帮助非常大
/**********************
时间:2014年7月7日0:34:09
地点:桂电
制作:天空之恋
说明:测试串口,测试单片机ID,测试LED闪烁
9600
2014年7月28日13:01:22
在新的板子上硬件调试成功
*******************/
#include <stc12c2052ad.h> //stc单片机专用的头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit MCU_Start_Led = P3^7;
#define RELOAD_COUNT 0xfd //11.0592MHz,12T,SMOD=0,9600bp
void serial_port_initial();
void send_UART(unsigned char);
void UART_Interrupt_Receive(void);
void delay(void);
void display_MCU_Start_Led(void);
void main(void)
{
unsigned char i = 0;
unsigned char j = 0;
unsigned char idata *idata_point;
serial_port_initial();
display_MCU_Start_Led(); //
idata_point = 0xF8;
for(j=0;j<=3;j++)
{
i = *idata_point;
send_UART(i);//这个地方把单片机内部的序列号发送出来了
idata_point++;
}
while(1)
{
send_UART('2');
delay();
send_UART(10);
delay();
display_MCU_Start_Led();
}
}
void serial_port_initial()
{
SCON = 0xc0; //0101,0000 8
TMOD = 0x21; //0011,0001
PCON=0X00;//频率提高一倍
TH1 = RELOAD_COUNT; //
TL1 = RELOAD_COUNT;
TR1 = 1; //
ES = 1; //
EA = 1; //
}
void send_UART(unsigned char i)
{
ES = 0; //
TI = 0; //
SBUF = i;
while(TI ==0); //
TI = 0; //
ES = 1; //
}
void UART_Interrupt_Receive(void) interrupt 4
{
unsigned char k = 0;
if(TI) TI=0;
}
void delay(void)
{
unsigned int j = 0;
unsigned int g = 0;
for(j=0;j<5;j++)
{
for(g=0;g<20000;g++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void display_MCU_Start_Led(void)
{
unsigned char i = 0;
MCU_Start_Led = 0; //
delay();
MCU_Start_Led = 1; //
delay();
MCU_Start_Led = 0; //
}
3、MAX6675读取实验。通过MAX6675采集热电偶温度,将采集的温度发到串口调试助手显示。
/**********************
时间:2014年7月7日0:34:09
地点:桂电
制作:天空之恋
说明:测试串口,测试单片机ID,测试LED闪烁
9600
//这个地方主要就是看时序了
这个地方需要小心了
2014年7月28日13:08:38
在新的板子上硬件调试成功
*******************/
#include <stc12c2052ad.h> //stc单片机专用的头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit MCU_Start_Led = P3^7;
#define RELOAD_COUNT 0xfd //18.432MHz,12T,SMOD=0,9600bp
sbit MAX6675_SO=P1^6;
sbit MAX6675_SCK=P1^7;
sbit MAX6675_CS=P1^4;
unsigned int Value;
unsigned char data disdata[5];
void serial_port_initial();
void send_UART(unsigned char);
void UART_Interrupt_Receive(void);
void delay(void);
void display_MCU_Start_Led(void);
void delayspi(uint n)
{
while (n--)
{
_nop_();
_nop_();
}
}
/*******************
这个地方要特别注意了,主要是时序问题
***********************************/
unsigned int ReadMAX6675()
{
unsigned char count;
MAX6675_CS=1; //关闭MAX6675
delayspi(500);
MAX6675_CS=0;//置低,使能MAX6675
delayspi(500);
MAX6675_SCK=1;
delayspi(500);
Value=0;
for(count=16;count>0;count--) //获取16位MSB
{
MAX6675_SCK=0; //sck置低
delayspi(500);
Value=Value<<1; //左移
if(MAX6675_SO==1) //取当前值
Value|=0x0001;
else
Value&=0xffff;
MAX6675_SCK=1;
delayspi(500);
}
MAX6675_CS=1; //关闭MAX6675
delayspi(500);
return Value;
}
/**************************温度值显示 **************************************************/
void tempdisp()
{
unsigned int TempValue;
unsigned int xiaoshu;
TempValue=ReadMAX6675();//读取MAX6675 转换后的温度数值;
delayspi(500);
TempValue=TempValue<<1; //去掉第15位
TempValue=TempValue>>4;//去掉第0~2位
xiaoshu=TempValue*10;
TempValue=TempValue/4; //MAX6675最大数值为1023。75,而AD精度为12位,即2的12次方为4096,转换对应数,故要除4;
xiaoshu=xiaoshu/4; //与上述同理
if(TempValue>=1024)
{TempValue=1024;}
disdata[0]=(TempValue/1000)%10+0x30;//千位 +0x30是对应LCD里的ROM字符位置编码
disdata[1]=(TempValue/100)%10+0x30;//百位 +0x30是对应LCD里的ROM字符位置编码
disdata[2]=(TempValue/10)%10+0x30;//十位 +0x30是对应LCD里的ROM字符位置编码
disdata[3]=(TempValue)%10+0x30;//个位 +0x30是对应LCD里的ROM字符位置编码
disdata[4]=xiaoshu%10+0x30;//分位 +0x30是对应LCD里的ROM字符位置编码
//使用串口将数据发送出来
}
void main(void)
{
uint i=0;
serial_port_initial();
display_MCU_Start_Led(); //
while(1)
{
tempdisp();
for(i=0;i<5;i++)
{
if(i==4)
{
send_UART('.');
}
send_UART(disdata[i]);
delayspi(5000);
}
send_UART(10);
delayspi(5000);
delay();
display_MCU_Start_Led();
delay();
delay();
delay();
}
}
void serial_port_initial()
{
SCON = 0xc0; //0101,0000 8
TMOD = 0x21; //0011,0001
PCON=0X00;//频率提高一倍
TH1 = RELOAD_COUNT; //
TL1 = RELOAD_COUNT;
TR1 = 1; //
ES = 1; //
EA = 1; //
}
void send_UART(unsigned char i)
{
ES = 0; //
TI = 0; //
SBUF = i;
while(TI ==0); //
TI = 0; //
ES = 1; //
}
void UART_Interrupt_Receive(void) interrupt 4
{
unsigned char k = 0;
if(TI) TI=0;
}
void delay(void)
{
unsigned int j = 0;
unsigned int g = 0;
for(j=0;j<5;j++)
{
for(g=0;g<15000;g++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void display_MCU_Start_Led(void)
{
unsigned char i = 0;
MCU_Start_Led = 0; //
delay();
MCU_Start_Led = 1; //
delay();
MCU_Start_Led = 0; //
}
- STC12C4052部分调试成功的程序
- IIC 程序调试成功代码
- web程序的初始化问题——ServletContextListener----调试成功
- 基于MSP430F5438A的ESP8266模块STA模式程序调试成功。
- (未解决)MDI程序开多个视图,用Tab页并排显示。Debug下完全成功显示,Release调试模式下成功显示,但是直接点Release下的exe,部分弹出视图为空
- 改变部分程序,应用调试
- 解决Code::Blocks部分不能调试程序的原因
- 调试程序的部分功能最好不要在虚拟机上
- Windows程序调试----第一部分 调试策略----第1章 调试的过程
- 第一个java程序调试成功
- Windows程序调试----第一部分 调试策略----第2章 编写使于调试的C++代码
- Eclipse中调试Java程序 部分快捷键
- 关于android程序在虚拟机成功调试但是在真机闪退的问题!
- STC12C4052 PWM脉宽调制功能模块
- 程序的基本部分
- 部分告别Qt调试,另类使用显示Qt程序中函数加载顺序的方式
- Windows程序调试----第三部分 调试技术----第10章 调试多线程程序
- 哇卡卡卡~今天Qt第一个原创程序调试成功
- 求每年最高气温
- 指针和数组——(个人笔记)
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- 学生成绩管理系统
- gcc-o
- STC12C4052部分调试成功的程序
- 从头到尾彻底理解KMP(2014年7月版)
- java MD5实现
- 吉利全球鹰熊猫CROSS
- selenium webdriver之(1).eclipse java开发环境搭建
- CentOS6.4编译Hadoop-2.2.0
- CSS选择器分类、选择器优先级以及CSS优化原则
- 产品经理入职30天内最应做的12件事(谷歌风投合伙人)
- wait()和waitpid()函数