关于 attiny2313下 编写串口通信程序 ,为什么我通过PC发送的数据attiny2313认不出来呢
程序如下
#include<avr/ioh>
#include<avr/delayh>
#include<avr/signalh>
#include<avr/interrupth>
#include<stdioh> //这个是我自己添加的头文件
#define uchar unsigned char
#define uint unsigned int
#define BAUDRATE 9600 //波特率
void put_c(unsigned char c) //发送采用查询方式
{
while(!(UCSRA&(1<<UDRE)));
UDR=c;
}
void inituart(void)
{
UBRRL= (F_CPU/BAUDRATE/16-1)%256;
UBRRH= (F_CPU/BAUDRATE/16-1)/256;
UCSRA = 0x00;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC = 0x06;
//使能接收中断,使能接收,使能发送
}
void io_init(void)
{
PORTB = 0xf0;
DDRB = 0xff;
}
SIGNAL(SIG_USART0_RX)
{
put_c(UDR);
}
int main(void)
{
cli();
io_init();
inituart();
sei();
while(1);
}
我以前调试过这个程序,是可以用的,有一块attiny2313的芯片下过一个程序跑的时候,从PC发数据,通过串口调试助手能够收回来需要的数据
但是现在重新编译下载这个程序,发出去了数据,收回来的不是想要的数据
现在我在串口调试助手下只能发送ASCII码,比如‘1’。‘2’,‘a’这样的,发送十六进制比如0x01,就显示收不到数据
无论发送什么样的ASCII码值
收到的都是
2008年网站第一个开源项目 Ethernet IO Kit,单片机上网,网络开发板,网络控制
USB接口,即插即用。非常适合只有usb接口的笔记本电脑。用此下载线只要电脑有USB口就可以轻松学习单片机了,方便大家学习和开发单片机。
该款最新版超稳定USBASP下载器特点:
1、支持USB11或USB20通信;支持
WIN98,WINME,WIN2K,WINXP *** 作系统
2、采用USB口供电
3、在对芯片编程时,可以使用目标板本身电源,也可选择USB电源给目标板下载完成不影响目标板的运行。
4、支持S51及AVR芯片的烧录,速度比并口ISP要快,更稳定,也方便没有并口笔记本电脑使用。
5、采用最新版超稳定固件,下载速度更快,更稳定;
6若使用IDC10接口,目标板ISP座接口定义如下
这是AT89S5X系列引脚定义,下载线连接时MOSI——>P15,MISO——>P16,SCK——>P17,/RES——>RST,GND——>GND,VTG——>VCC
配置:最新版USBASP下载器一个,10芯高质量下载线一条。
驱动程序及软件通过网络直接传送,方便迅速。
驱动安装、下载软件使用教程如下:
找一个空闲的USB接口把下载器插上,电脑就会发现新硬件了,如图所示
出现安装新硬件向导的时候我们选择“否,暂时不”,因为我们要手动安装驱动
然后点击下一步,在下个窗口中我们选择“从列表或指定位置安装”
再点下一步,点浏览
找到传输给你的压缩包解压出来的文件地址,我的是在桌面
然后点确定,再点下一步,可看到文件复制进度
接下来我们就完成了驱动的安装了,
在设备管理器上应该能看到如下图所示的USBASP设备就对了
至此,整个驱动安装完成,接下来我们看看如何使用好它,把下载线跟目标板连接,打开软件AVR_fighter,在芯片选择框选择跟目标板一样的MCU型号,如AT89S51
再点击“装flash”,我们要把自己的烧录文件加载到软件上,以ledhex为例
装入flash以后可以在软件界面中看到flash大小,最下面状态栏有flash的绝对路径
接下来的事情就简单了,只要点击“编程”按钮,
如果看到进度条移动,那么说明USB下载线及其跟目标板的连接正确无误,程序正在下到目标芯片中,完成之后会有声音提示,至此整个下载过程完成。
下载前请检查接口是否跟下载线兼容(如果接口顺序不对,用杜邦线转接一下即可,很简单)。
支持芯片列表如下:
二、AVR系列(几乎支持市面上所有的AVR系列):
AT90CAN32,AT90CAN64,AT90CAN128,AT90PWM2,AT90PWM3,AT90S1200,AT90S2313,AT90S2323,AT90S2343,AT90S4414,AT90S4433,AT90S4434,AT90S8515,AT90S8535,AT90USB1286,AT90USB1287,ATMEGA103,ATMEGA128,ATMEGA1280,ATMEGA1281,ATMEGA16,ATMEGA161,ATMEGA162,ATMEGA163,ATMEGA164,ATMEGA165,ATMEGA168,ATMEGA169,ATMEGA2560,ATMEGA2561,ATMEGA32,ATMEGA323,ATMEGA324,ATMEGA325,ATMEGA3250,ATMEGA329,ATMEGA3290,ATMEGA406,ATMEGA48,ATMEGA64,ATMEGA640,ATMEGA644,ATMEGA645,ATMEGA6450,ATMEGA649,ATMEGA6490,ATMEGA8,ATMEGA8515,ATMEGA8535,ATMEGA88,ATTINY11,ATTINY12,ATTINY13,ATTINY15,ATTINY22,ATTINY2313,ATTINY24,ATTINY25,ATTINY26,ATTINY261,ATTINY28,ATTINY44,ATTINY45,ATTINY461,ATTINY84,ATTINY85,ATTINY861。。。。。。
谢谢
晶振可以不接。因为AVR有内部晶振,我用过,要求不高的时候完全能满足。
复位最好不要悬空,悬空引脚上的信号是不确定的,不一定哪根线被空间里谁的手机信号干扰一下,你的单片机就复位了。而且悬空的话,一旦程序跑飞,连哭都没地方哭去。所以,哪怕你有看门狗,也最好把复位信号挂到一个稳定的电平上。
单片机(MCU)一般都有内部EEPROM/FLASH供用户存放程序和工作数据。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就叫单片机加密。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序这就叫单片机解密。
任何一款单片机从理论上讲,攻击者均可利用足够的投资和时间使用以上方法来攻破。这是系统设计者应该始终牢记的基本原则。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。我们根据沪生电子的解密实践提出下面建议:
(1)在选定加密芯片前,要充分调研,了解单片机破解技术的新进展,包括哪些单片机是已经确认可以破解的。尽量不选用已可破解或同系列、同型号的芯片选择采用新工艺、新结构、上市时间较短的单片机,如可以使用ATMEGA88/ATMEGA88V,这种国内目前破解的费用一需要6K左右,另外目前相对难解密的有ST12系列,DSPPIC等;其他也可以和CPLD结合加密,这样解密费用很高,解密一般的CPLD也要1万左右。
(2)尽量不要选用MCS51系列单片机,因为该单片机在国内的普及程度最高,被研究得也最透。
(3)产品的原创者,一般具有产量大的特点,所以可选用比较生僻、偏冷门的单片机来加大仿冒者采购的难度,选用一些生僻的单片机,比如ATTINY2313,AT89C51RD2,AT89C51RC2,motorola单片机等比较难解密的芯片,目前国内会开发使用熟悉motorola单片机的人很少,所以破解的费用也相当高,从3000~3万左右。
(4)在设计成本许可的条件下,应选用具有硬件自毁功能的智能卡芯片,以有效对付物理攻击;另外程序设计的时候,加入时间到计时功能,比如使用到1年,自动停止所有功能的运行,这样会增加破解者的成本。
(5)如果条件许可,可采用两片不同型号单片机互为备份,相互验证,从而增加破解成本。
(6)打磨掉芯片型号等信息或者重新印上其它的型号,以假乱真(注意,反面有LOGO的也要抹掉,很多芯片,解密者可以从反面判断出型号,比如51,WINBOND,MDT等)。
(7)可以利用单片机未公开,未被利用的标志位或单元,作为软件标志位。
(8)利用MCS-51中A5指令加密,其实世界上所有资料,包括英文资料都没有讲这条指令,其实这是很好的加密指令,A5功能是二字节空 *** 作指令加密方法在A5后加一个二字节或三字节 *** 作码,因为所有反汇编软件都不会反汇编A5指令,造成正常程序反汇编乱套,执行程序无问题仿制者就不能改变你的源程序。
(9)你应在程序区写上你的大名单位开发时间及仿制必究的说法,以备获得法律保护;另外写上你的大名的时候,可以是随机的,也就是说,采用某种算法,外部不同条件下,你的名字不同,比如>
你的TCNT0应该为178,而不是255-79=176。
再就是在中断服务子程序里,重新加载数据后,再判断中断次数是不是100次,如果是100次了就让灯的状态取反(亮或灭),然后中断计数次数清零,如此的循环下去。看你写的好像那么麻烦那。
//判断定时0计数是否启动? ——--这句好像不用要吧
Delay0_Count=Max_Delay-100; //到了则重新给定时0计数赋初值--------这句应该改为灯动作然后把100次归零的语句!!!前面已经有TCNT0=255-79; //定时器0计数寄存器赋初值(10MS时基)-----这句了,为什么还要再加载数据???
应该改动{}内的语句:
{
Delay0_Count=Max_Delay-100; //到了则重新给定时0计数赋初值
Delay_End_Bit&=(~BIT(Delay0_End_Flag));//定时0定时结束标志位清0
}
改为灯动作然后把100次归零的语句;
试试看吧,我认为是这个原因,瞎说了
以上就是关于关于ATTINY2313全部的内容,包括:关于ATTINY2313、avr fighter如何安装和使用、请问AVR的单片机可不可不外接复位电路和晶振啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)