|
楼主 |
发表于 2009-12-31 17:56:26
|
显示全部楼层
上:
接线 就是 楼顶图一
控制位在 PC7
(原文件名:485串口1.jpg)
------------------------
程序:
//包含所需头文件
#include <iom16v.h>
#include <macros.h>
#include <eeprom.h>
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uint omron[13] = {0x01,0x10,0x21,0x01,0x00,0x02,0x04,0x00,0x01,0x12,0xc0,0xfb,0x02};
uint aelta[8] = {0x01,0x06,0x20,0x01,0x00,0x1E,0xC2,0x53};// 写入001E即30Hz
uint receive_data[8];
void printf(uint *s);
void print(uint temp);
uint pp=0;
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
EEPROMwrite(pp,UDR);
pp++;
if (pp>8) pp=0;
}
//端口初始化
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x80;
DDRC = 0x80;
PORTD = 0x01;
DDRD = 0x02;
}
//串口通信初始化
void usart_init(void)
{
UCSRB = 0x00;//禁止中断
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x26; //偶校验 停止位1位 8位数据位
UBRRL = 0x33;
UBRRH = 0x00; //9600 波特率
UCSRB = 0x98; //发送、接收允许
}
void init_devices(void)
{
CLI(); //禁止所有中断
MCUCR = 0x00;
//MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
TIMSK = 0x00;
port_init();
usart_init();
SEI();//开全局中断
}
void print(uint temp)
{ while(!(UCSRA&(1<<UDRE)));
UDR=temp; }
void printf(uint *s)
{uint i;
i=sizeof(omron)/2;
while(i){print(*s++); i--;}
}
//主函数
void main(void)
{uint i=0,j;
init_devices();
//在这继续添加你的代码
while(1)
{
PORTC|=0x80;
for(j=0;j<5000;j++);
printf(omron); //发
// 收
PORTC&=0x7F;
for(j=0;j<50000;j++);
for(j=0;j<50000;j++);
for(j=0;j<50000;j++);
for(j=0;j<50000;j++);
}
}
==================================================
电脑过来 都能正常接收!
就是 变频器反馈过来的 收不到! 不会产生中断!
-------------------------------
待会我加几个电阻电容试试, 再不行就加光耦!
我 认为是干扰的 问题 |
|