一个困扰我很久的问题!急需解决,在线等!
时间:10-02
整理:3721RD
点击:
这是我写的程序
#include <pic.h>
__CONFIG(0x3f36);
#define uchar unsigned char
#define uint unsigned int
#define QT RD0
#define ZF RD1
#define DPP RD2 //脉冲
#define DI RC5
#define NUM 103
#define Y_XW RB0//压紧的限位
#define S_XW RB1//伸缩的限位
uchar flag_m=0;
uchar flag_y=0;//挤压
uchar flag_s=0;//松
uchar table_R[24];
uchar g;
uchar temp;
void init(void);
void init_usart(void);
void init_WDT(void);
void init_time(void);
void fasong(uchar task_num,uchar zt);//task_num=1压 task_num=0缩
void Delay(uchar i);
void maichong(void);
void mian()
{
init();
while(1)
{
if(flag_s)
{
flag_s=0;
ZF=0; //前进
QT=1;
maichong();
fasong(0x04,0x02);//缩回完成
}
CLRWDT();
if(flag_y)
{
flag_y=0;
ZF=1;
QT=1;
maichong();
fasong(0x04,0x01);//挤压完成
}
}
}
void Delay(uchar i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void init_usart()
{
TRISC=0X9F;
PORTC=0X00;
TXSTA=0X24;
RCSTA=0X90;
SPBRG=71; //配置波特率
GIE=1;
PEIE=1;
RCIE=1; //串口接收中断使
}
void init_wdt()
{
PSA=1; //预分频器分配给WDT使用
PS2=1;
PS1=1;
PS0=1; //预分频器128分频
}
void init_time( )
{
T1CON=1;
TMR1IF=0;
TMR1IE=1;
TMR1H=0xFE;
TMR1L=0xEB;
}
void init()
{
init_WDT();
init_usart();
DI=0;//接收模式
}
void fasong(uchar task_num,uchar zt)
{
table_R[1]=NUM;
table_R[2]=0x00;
table_R[3]=zt;
table_R[4]=task_num;
DI=1;
for(uchar j=0;j<24;j++)
{
TXREG=table_R[j];
while(!TRMT);
}
DI=0;
}
void maichong()
{
init_time();
if(flag_m)
{
flag_m=0;
DPP=1;
DPP=0;
}
if(Y_XW == 0) //控制停
{
Delay(15);
if(Y_XW == 0)
{
while(!Y_XW);
TMR1IE=0;
QT=0;
}
}
}
void interrupt com()
{
if(TMR1IE&&TMR1IF)
{
TMR1IF=0;
TMR1H=0xFE;
TMR1L=0xEB; //每100us中断一次
flag_m=1;
}
if(RCIF&&RCIE)
{
if(FERR||OERR){CREN=0;CREN=1;}
temp=RCREG;
for(g=0;g<=22;g++) //以队列的方式将接受的数据传入数组 先进先出 后进后出
{
table_R[g]=table_R[g+1];
}
table_R[23]=temp;
if((table_R[0]==0xbb)&&(table_R[23]==0xee))//过滤接收数据
{
if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x01))
{
flag_y=1;//压
}
if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x02))
{
flag_s=1;//缩
}
}
}
}
最后报错(看截图)
困扰我两天了,在线等谢谢啦各位!
#include <pic.h>
__CONFIG(0x3f36);
#define uchar unsigned char
#define uint unsigned int
#define QT RD0
#define ZF RD1
#define DPP RD2 //脉冲
#define DI RC5
#define NUM 103
#define Y_XW RB0//压紧的限位
#define S_XW RB1//伸缩的限位
uchar flag_m=0;
uchar flag_y=0;//挤压
uchar flag_s=0;//松
uchar table_R[24];
uchar g;
uchar temp;
void init(void);
void init_usart(void);
void init_WDT(void);
void init_time(void);
void fasong(uchar task_num,uchar zt);//task_num=1压 task_num=0缩
void Delay(uchar i);
void maichong(void);
void mian()
{
init();
while(1)
{
if(flag_s)
{
flag_s=0;
ZF=0; //前进
QT=1;
maichong();
fasong(0x04,0x02);//缩回完成
}
CLRWDT();
if(flag_y)
{
flag_y=0;
ZF=1;
QT=1;
maichong();
fasong(0x04,0x01);//挤压完成
}
}
}
void Delay(uchar i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void init_usart()
{
TRISC=0X9F;
PORTC=0X00;
TXSTA=0X24;
RCSTA=0X90;
SPBRG=71; //配置波特率
GIE=1;
PEIE=1;
RCIE=1; //串口接收中断使
}
void init_wdt()
{
PSA=1; //预分频器分配给WDT使用
PS2=1;
PS1=1;
PS0=1; //预分频器128分频
}
void init_time( )
{
T1CON=1;
TMR1IF=0;
TMR1IE=1;
TMR1H=0xFE;
TMR1L=0xEB;
}
void init()
{
init_WDT();
init_usart();
DI=0;//接收模式
}
void fasong(uchar task_num,uchar zt)
{
table_R[1]=NUM;
table_R[2]=0x00;
table_R[3]=zt;
table_R[4]=task_num;
DI=1;
for(uchar j=0;j<24;j++)
{
TXREG=table_R[j];
while(!TRMT);
}
DI=0;
}
void maichong()
{
init_time();
if(flag_m)
{
flag_m=0;
DPP=1;
DPP=0;
}
if(Y_XW == 0) //控制停
{
Delay(15);
if(Y_XW == 0)
{
while(!Y_XW);
TMR1IE=0;
QT=0;
}
}
}
void interrupt com()
{
if(TMR1IE&&TMR1IF)
{
TMR1IF=0;
TMR1H=0xFE;
TMR1L=0xEB; //每100us中断一次
flag_m=1;
}
if(RCIF&&RCIE)
{
if(FERR||OERR){CREN=0;CREN=1;}
temp=RCREG;
for(g=0;g<=22;g++) //以队列的方式将接受的数据传入数组 先进先出 后进后出
{
table_R[g]=table_R[g+1];
}
table_R[23]=temp;
if((table_R[0]==0xbb)&&(table_R[23]==0xee))//过滤接收数据
{
if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x01))
{
flag_y=1;//压
}
if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x02))
{
flag_s=1;//缩
}
}
}
}
最后报错(看截图)
困扰我两天了,在线等谢谢啦各位!

MAIN函数没定义 要么放最后面 要么在最前面声明一下
已经换过 两次编译器 还是无果!
把MAIN函数放到走后门
谢谢您 ,我的问题找到了 刚才您一提醒 ,我观察了一下我的main函数 我把main拼错了 拼成了mian 我自己都笑了 找了两天的错误 呵呵哒! 最后谢谢您!
建议小编再贴代码的会应该使用论坛的代码编辑窗口,看着比较养眼
原来是这样 看来我的眼神也不好啦
新人不懂啊 ,望见谅
- #include <pic.h>
- __CONFIG(0x3f36);
- #define uchar unsigned char
- #define uint unsigned int
- #define QT RD0
- #define ZF RD1
- #define DPP RD2 //脉冲
- #define DI RC5
- #define NUM 103
- #define Y_XW RB0//压紧的限位
- #define S_XW RB1//伸缩的限位
- uchar flag_m=0;
- uchar flag_y=0;//挤压
- uchar flag_s=0;//松
- uchar table_R[24];
- uchar g;
- uchar temp;
- void init(void);
- void init_usart(void);
- void init_WDT(void);
- void init_time(void);
- void fasong(uchar task_num,uchar zt);//task_num=1压 task_num=0缩
- void Delay(uchar i);
- void maichong(void);
- void mian()
- {
- init();
- while(1)
- {
-
- if(flag_s)
- {
- flag_s=0;
- ZF=0; //前进
- QT=1;
- maichong();
- fasong(0x04,0x02);//缩回完成
- }
- CLRWDT();
- if(flag_y)
- {
- flag_y=0;
- ZF=1;
- QT=1;
- maichong();
- fasong(0x04,0x01);//挤压完成
- }
-
- }
- }
- void Delay(uchar i)
- {
- uchar x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=148;x++);
- }
- void init_usart()
- {
- TRISC=0X9F;
- PORTC=0X00;
- TXSTA=0X24;
- RCSTA=0X90;
- SPBRG=71; //配置波特率
- GIE=1;
- PEIE=1;
- RCIE=1; //串口接收中断使
- }
- void init_wdt()
- {
- PSA=1; //预分频器分配给WDT使用
- PS2=1;
- PS1=1;
- PS0=1; //预分频器128分频
- }
- void init_time( )
- {
-
- T1CON=1;
- TMR1IF=0;
- TMR1IE=1;
- TMR1H=0xFE;
- TMR1L=0xEB;
- }
- void init()
- {
- init_WDT();
- init_usart();
- DI=0;//接收模式
- }
- void fasong(uchar task_num,uchar zt)
- {
- table_R[1]=NUM;
- table_R[2]=0x00;
- table_R[3]=zt;
- table_R[4]=task_num;
- DI=1;
- for(uchar j=0;j<24;j++)
- {
- TXREG=table_R[j];
- while(!TRMT);
- }
- DI=0;
- }
- void maichong()
- {
- init_time();
- if(flag_m)
- {
- flag_m=0;
- DPP=1;
- DPP=0;
- }
- if(Y_XW == 0) //控制停
- {
- Delay(15);
- if(Y_XW == 0)
- {
- while(!Y_XW);
- TMR1IE=0;
- QT=0;
-
- }
- }
-
- }
- void interrupt com()
- {
- if(TMR1IE&&TMR1IF)
- {
- TMR1IF=0;
- TMR1H=0xFE;
- TMR1L=0xEB; //每100us中断一次
- flag_m=1;
- }
-
- if(RCIF&&RCIE)
- {
-
- if(FERR||OERR){CREN=0;CREN=1;}
- temp=RCREG;
- for(g=0;g<=22;g++) //以队列的方式将接受的数据传入数组 先进先出 后进后出
- {
- table_R[g]=table_R[g+1];
- }
- table_R[23]=temp;
- if((table_R[0]==0xbb)&&(table_R[23]==0xee))//过滤接收数据
- {
-
- if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x01))
- {
- flag_y=1;//压
- }
- if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x02))
- {
- flag_s=1;//缩
- }
- }
- }
- }
我把你的代码贴在了9楼,你看一下是不是觉得清爽一些了
太爽啦 哈哈!谢谢!
您用PIC控制过伺服电机吗?
