資源簡介
程序提供了,步進電機的完美控制,通過串口接收到的數(shù)據(jù),來控制步進電機的左右移動

代碼片段和文件信息
/********************************************************************
*?文件名??:?串口接收試驗.c
*?描述????:??該文件實現(xiàn)通過單片機從電腦接收數(shù)據(jù)。通過數(shù)碼管顯示
?該試驗使用的晶振是11.0592如果使用12M晶振,會出現(xiàn)串口接收
?不正常的情況。原因是用12M晶振,波特率9600時的誤差率達?8%
?當下載這個程序到單片機時,單片機的最高為為亂碼,是正常現(xiàn)象,
?按一下復位鍵便可。是由于單片機下載也是通過串口下載引起的。
*?創(chuàng)建人??:?東流,2009年4月8日
*?版本號??:?2.0
*?感謝“中國自動化資訊網(wǎng)”對本工作室的大力支持。
***********************************************************************/
#include
#include
#define?uchar?unsigned?char
#define?uint??unsigned?int
//unsigned?char?code?F_Rotation[4]={0x010x020x040x08};//正轉(zhuǎn)表格?
//unsigned?char?code?B_Rotation[4]={0x080x040x020x01};//反轉(zhuǎn)表格
unsigned?char?code?F_Rotation[4]={0x080x040x020x01};//反轉(zhuǎn)表格?
unsigned?char?code?B_Rotation[4]={0x010x020x040x08};//正轉(zhuǎn)表格
unsigned?char?code?L_led[9]={0x000x010x030x070x0f0x1f0x3f0x7f0xff};//二極管靜態(tài)變量
sbit?Key1?=?P2^0;????
sbit?Key2?=?P2^1;
uchar?LED_Buffer?;??????//從串口接收的數(shù)據(jù)
/********************************************************************
*?名稱?:?Delay_1ms()
*?功能?:?延時子程序,延時時間為?1ms?*?x
*?輸入?:?x?(延時一毫秒的個數(shù))
*?輸出?:?無
***********************************************************************/
void?Delay_1ms(uint?i)//1ms延時
{
uchar?xj;
for(j=0;j for(x=0;x<=148;x++);
}
void?Delay(unsigned?int?i)//延時
{
?while(--i);
}
/********************************************************************
*?名稱?:?Com_Int()
*?功能?:?串口中斷子函數(shù)
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?Com_Int(void)?interrupt?4
{
//static?uchar?i?=?7;????//定義為靜態(tài)變量,當重新進入這個子函數(shù)時?i?的值不會發(fā)生改變
EA?=?0;
if(RI?==?1)???//當硬件接收到一個數(shù)據(jù)時,RI會置位
{
LED_Buffer?=?SBUF?-?48;?//這里減去48是因為從電腦中發(fā)送過來的數(shù)據(jù)是ASCII碼。
RI?=?0;??
//if(i==0)?i?=?8;??
//i--;
}
EA?=?1;
}
/********************************************************************
*?名稱?:?Com_Init()
*?功能?:?串口初始化,晶振11.0592波特率9600,使能了串口中斷
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?Com_Init(void)
{
?????TMOD?=?0x20;
?????PCON?=?0x00;
?????SCON?=?0x50;
?????TH1?=?0xFd;????//設置波特率?9600
?????TL1?=?0xFd;
?????TR1?=?1; //啟動定時器1
?ES?=?1; //開串口中斷
?EA?=?1; //開總中斷
}
void?Key()
{
????uchar?l;?
????if(Key1==0||Key2==0)
??{
?????while(Key1==0)
???{
??????for(l=0;l<4;l++)??????
????????????????{
??????????????????P1=F_Rotation[l];??
??????????????????Delay(500);????????
????????????}
???}
?while(Key2==0)
???{
???????for(l=0;l<4;l++)??????
????????????????{
??????????????????P1=B_Rotation[l];??
??????????????????Delay(500);????????
????????????}
???}
??}
}
/********************************************************************
*?名稱?:?Main()
*?功能?:?主函數(shù)
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?Main()
{
uchar?i?=?4jk;
Delay_1ms(100);
Com_Init();
P0?=?L_led[i];
//P2?=?0x80;??//這里把P2口的最高為置1,進入循環(huán)后?循環(huán)左移?一位正好是P2?最低為置1
whil
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-06-10?18:22??科研訓練計劃程序\
?????文件????????5115??2002-04-16?14:32??科研訓練計劃程序\STARTUP.A51
?????文件???????11665??2012-06-10?18:21??科研訓練計劃程序\STARTUP.LST
?????文件?????????749??2012-06-10?18:21??科研訓練計劃程序\STARTUP.OBJ
?????文件????????5900??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗
?????文件????????4189??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗.c
?????文件?????????900??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗.hex
?????文件??????????72??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗.lnp
?????文件????????8584??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗.LST
?????文件???????10083??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗.M51
?????文件????????6050??2012-06-10?18:21??科研訓練計劃程序\串口接收試驗.OBJ
?????文件????????1289??2012-06-10?18:22??科研訓練計劃程序\串口接收試驗.Opt
?????文件????????2411??2012-06-10?18:22??科研訓練計劃程序\串口接收試驗.plg
?????文件????????2059??2012-03-11?14:00??科研訓練計劃程序\串口接收試驗.Uv2
?????文件????????1287??2012-06-10?17:15??科研訓練計劃程序\串口接收試驗_Opt.Bak
?????文件????????2046??2010-04-20?00:43??科研訓練計劃程序\串口接收試驗_Uv2.Bak
- 上一篇:labview電梯小程序課程設計
- 下一篇:SHA1哈希值計算包含h和cpp文件
評論
共有 條評論