简易数显电源草图
2010年08月7日
by trueman
0 comments
简易数显电源草图 备份一下。
2010年08月7日
by trueman
0 comments
上次买了一个USBISP,芯片没有编好几个,全部弄坏了,ISP编程进入不了编程模式。折腾了一段时间,一直没有恢复。 现在手头实在没有MEGA8了。想到手头有信号发生器,只好再试一次。 经过几次实验,居然成了。 过程是这样的: 1、reset引脚上拉(不知道有没有作用); 2、将mega8的PIN7(XTAL1)接到3MHz的方波上; 3、将晶振设置到内部。
2010年08月7日
by trueman
0 comments
什么是超级终端 超级终端是Windows操作系统自带的一个通讯工具,可以通过这个工具对路由器交换机等进行配置。使用调制解调器或一条零调制解调电缆以太网连接,再调用此程序能够连接到其他计算机、Telnet 站点、公告板系统 (BBS)、联机服务和主机。我们可以用它来调试电路是否可行。 使用:开始→程序→附件→通讯→超级终端(可新建或者使用现有的连接对设备进行配置) 启动命令是:hypertrm.exe 超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。 超级终端的原理 超级终端的原理并不复杂,它是将用户输入随时发向串口(采用TCP协议时是发往网口,这里只说串口的情况),但并不显示输入。它显示的是从串口接收到的字符。所以,嵌入式系统的相应程序应该完成的任务便是: 1、将自己的启动信息、过程信息主动发到运行有超级终端的主机; 2、将接收到的字符返回到主机,同时发送需要,也可以远程管理服务器。 超级终端常用操作 超级终端应用比较简单,和一般的串口软件差不多 1、通过发送0x0C(12)即可实现清屏。有时可能发送一个没有接收正确,连续发送两次0x0C即可保证可靠清屏;将光标退格(注意这并不删除字符):发送0×08(8);将光标右移一个制表符(相当于TAB键):发送0×09(9);将光标移动到行首:发送0x0D(13); 2、将光标移动到同一列的下一行:发送0x0A(10)或0x0B(11);容易理解:通过发送0x0D跟0x0A,就可实现换行功能。 疑难问题解答 1、把超级终端最大化时,那个实际屏幕还是没有变化。 原因:"超级终端"的终端屏幕大小由所使用的字体大小决定。它将自行显示为 24 行,每行为 80 或 132 个字符,字体为所选字体。 解决方案:在超级终端的"查看"菜单上,选择"字体"。如果想要较大的终端屏幕,就选择较大的字体。如果想要较小的终端屏幕,就选择较小的字体。 2、键入的信息没有显示在超级终端上。 原因:终端屏幕显示的信息是来自远程计算机所发送的,而不是已输入到本地计算机上的信息。为了查看所键入的信息,远程计算机必须可反馈输入信息。这可能会在输入信息与终端屏幕显示信息之间存在时间滞后的问题。 解决方案:请确保与远程计算机正确连接,并且远程计算机可以反馈用户输入信息。 3、ANSI字符不能够正确显示。 原因:未使用终端字体。 解决方案:在超级终端的"查看"菜单上,选择"字体"。单击"终端",然后选择"确定"。 4、连接到远程计算机后,终端屏幕显示无意义信息。 原因:未选择正确的终端仿真类型。 解决方案:在超级终端的"文件"菜单上,选择"属性"。选中"设置"选项卡。在"仿真"下拉框中,选择远程计算机的终端类型。如果远程计算机类型没有在下拉框中列出,则超级终端不支持该类型。 5、不能从终端删除字符。 原因:所连接的远程计算机已经控制了显示在终端屏幕上的字符。远程计算机期望光标能根据已发送到屏幕上的数据而定位到屏幕中的特定位置。如果在本地上改变该屏幕,那么就有可能以主机所不能预料或控制的方式,潜在地中断了您与远程计算机之间交互操作。因此,超级终端不允许从屏幕上删除字符。 解决方案:不能。 6、用CTRL+V不能将数据粘贴到终端屏幕。 原因:如果在该连接属性的"终端键"进行了设置,按 CTRL+V 将会给模拟器发送转义序列。许多主机使用 CTRL+V 来导航它们的系统。 解决方案:可以将该设置更改到"Windows 键"中,然后 CTRL+V 就会正常运作。如要更改,请单击超级终端"文件"菜单中的"属性"。单击"设置"选项卡,然后单击" Windows 键"单选按钮。 要点 使用" Windows 键"设置时,所有的功能键、箭头键和控制键将在本地执行。建议选项为:使用"终端键"设置,然后使用菜单进行粘贴。
2010年08月6日
by trueman
0 comments
ATMEGA8定时器计数器1可以定时一秒。 ATMEGA8有T/C0、T/C1、T/C2,其中T/C0、T/C2是8位定时器;T/C1是16位定时器 一般我们在设计程序时,都是要求定时多少时间,可见,时间(妙S)是个已知条件,而单片机的的时钟频率一般在设计的最初也是已经确定下来的,所以,频率(HZ)也是一个已经条件,现在我们要求的就是比较值的大小了 公式如下: 比较值(次)=频率(次/S)* S 上式中的频率是T/C频率,并不是单片机时钟频率,如单片机时钟是8000000Hz,T/C的时钟是系统时钟的1024分频,那么 T/C时钟频率=8000000/1024=7812.5Hz,约=7812 假设我们要定时1秒钟,那么 比较值=7812(次/S) * 1S=7812次 可见,8位(255)的T/C0,T/C2是不能满足要求的,只有16位(65535)才能满足要求 程序如下 #include <mega8.h> interrupt [8] void timer1_ovf_isr(void) //为什么是9?请看M8中文数据手册的43页 { //请在这里添加你的中断代码 PORTB=255;//测试代码 PORTB=0; TCNT1H=0; //先写H 计数器重新开始计数 TCNT1L=0; //后写L } void main(void) { TCCR1A=4; //启用通道B强制比较功能 TCCR1B=5; //1024分频,一旦时钟设置成功,计数器就开始计数 TIMSK =4; //定时器1通道B比较匹配中断使能 OCR1BH=30; //设定通道B的比较值,写16位寄存器要先写H,再写L OCR1BL=162; //OCR1AH+OCR1AL=7812 TIMSK=8; //通道B比较中断使能 SREG=128; //打开全局中断 while (1) { //请在这里添加你的程序代码 [...]
2010年08月6日
by trueman
0 comments
硬中断的调试: 在调试中用了以前的串口程序。 程序下载: /****************************************/ /* http://truemans.inf */ /* 硬中断实验 */ /* 作者:HB */ /* 2010年8月5日 */ /* 目标MCU:MEGA8 晶振:内部晶振 8MHZ */ /****************************************/ #include <iom8v.h> #include <macros.h> #include "uart.h" extern signed char bufRxSize; extern signed char bufTxSize; unsigned char flagInt0; /* 接收中断 */ #pragma interrupt_handler Int0_interrupt:iv_INT0 void Int0_interrupt( void ) { flagInt0=1; } void main(void) [...]
2010年08月5日
by trueman
0 comments
查询方式:串口查询方式 中断完整方式:串口中断完整方式 简明版:串口中断程序简明版 这是经过验证基本完善的代码,分为三块: main.c、uart.h、uart.c 使用时可以直接使用uart.h、uart.c。 打包下载 详细程序参见: uart.h /******************************************/ /* http://truemans.inf */ /* RS232通讯框架 */ /* 作者:HB */ /* 2010年8月5日 */ /* 目标MCU:MEGA8 晶振:内部晶振 8MHZ */ /******************************************/ /* 字符输出函数 */ void putChar(unsigned char c); /* 字符输入函数 */ unsigned char getChar(void); /* 字符串输出函数 */ void putS(char *s); /* 串口初始化 */ void InitUSART(void); /* 发送中断 */ [...]