读/写atmega8515内部EEPROM的例子
/************************************************************** ;eeprom.c ;读/写atmega8515内部EEPROM的例子 ;将数据0....9写入eeprom中,再读出用数码管显示出来 ***************************************************************/ #include avr/io.h #include avr/eeprom.h #define uchar unsigned char #define Hidden 16 uchar DispTab ={0xC0,0xF9,0xA4
[单片机]
ATMEGA8单片机频率计程序与电路图
原理上采用32.768K外部晶振产生异步时钟信号 ,作为M8定时器2的时钟源,设定1024的预分频,可以得到TCNT2溢出的精确时间为1s,在溢出中断时控制74ls00与非门进而控制被测信号的通断,累计1s 内计数器获得的值,经过简单的运算则可获得被测信号的频率 M8 采用内部 8M 内部RC震荡 工作模式 , 电路采用74ls393 对被测信号进行预分频,相当于扩张T1计数器的位数,T1 为16位,74ls393为8位,扩展后为24位,T1不溢出的话 最高可测 16.777216M ,溢出则累计中断次数然后进行累加即可。(另外添加74ls393进行预分频的目的是为了解决T1引脚时钟信号不宜大于 单片机 工作频率的二分之一的问题
[单片机]
STM32复位源判断
在项目中有时候会遇到单片机莫名奇妙复位的情况,为了判断是那种原因引起复位,就需要对单片机的复位源进行判断。现用STM32F103C8T6单片机进行测试。 先看看单片机复位源都有哪些? 在STM32中文参考手册中可以看到,复位源可以通过状态寄存器来读出。 于是写一段程序来读取复位状态寄存器: void Check_Rst(void) { printf( CSR = %xrn , RCC- CSR); if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位 { printf( PIN reset rn ); } if(RCC_
[单片机]
ATMega8 PWM 功能(T/C 1)测试程序
#include avr/io.h #include avr/delay.h #define uchar unsigned char #define uint unsigned int #define FREQ 4 //延时 void DelayMs(uint ms) { uint i; for(i=0;i ms;i++) _delay_loop_2(FREQ * 250); } int main (void) { uchar direction=1; uchar PWM =0; // 8位 相位 修正PWM模式 //
[单片机]
ATmega88 Flash程序存储器
系统内可编程的Flash 程序存储器 ATmega88具有8K 字节的在线编程 Flash,用于存放程序指令代码。因为所有的AVR指令为16 位或32 位,故而 Flash 组织成4K x 16。 对于 ATmega88,用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot)程序区和应用程序区分开来考虑。 ATmega48中没有分为引导程序区和应用程序区,SPM 指令可在整个Flash中执行。详见P235“存贮程序存储器(SPM)控制和状态寄存器 – SPMCSR” 与 P243 中 SPMEN 部分的描述。。 Flash存储器至少可以擦写10,000次。ATmega88的程序计数器(PC)为12位,因此可以寻址4K
[单片机]
atmega8l直接驱动笔段式lcd驱动程序
#include include.h uchar lcdtab ={{{0x07,0x01,0x03},{0x04,0x00,0x02},{0x06,0x03,0x01}, {0x06,0x02,0x03},{0x05,0x02,0x02},{0x03,0x02,0x03},{0x03,0x03,0x03},{0x06,0x00,0x02}, {0x07,0x03,0x03},{0x07,0x02,0x03}}, {{0x18,0x14,0x0c},{0x10,0x10,0x00},{0x18,0x08,0x0c}, {0x18,0x18,0x08},{0x10,0x1c,0x00},{0x08,0x1c,0x08},{0x08
[单片机]
ATmega64 复位源
复位AVR 复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向量处的 指令必须是绝对跳转JMP 指令,以使程序跳转到复位处理例程。如果程序永远不会使能 中断,则中断向量可以由一般的程序代码所覆盖。 Figure 22 复位逻辑的电路图。Table 19 则定义了复位电路的电气参数。 复位源生效时I/O 端口立即复位为初始值,不需要任何时钟的辅助。 当所有的复位信号消失之后,延迟计数器被激活,从而延长了内部复位,并使得在MCU 正常工作之前电源达到稳定的电平。延迟计数器的溢出时间通过熔丝位CKSEL 由用户设 定。延迟时间的选择请参见P35“ 时钟源” 。 复位源 ATmega64 有5 个复位
[单片机]
ATmega8 内核介绍
为了获得最高的性能以及并行性, AVR 采用了Harvard 结构,具有独立的数据和程序总 线。程序存储器里的指令通过一级流水线运行。CPU 在执行一条指令的同时读取下一条 指令( 在本文称为预取)。这个概念实现了指令的单时钟周期运行。程序存储器是可以在 线编程的Flash 。 快速访问寄存器文件包括32 个8 位通用工作寄存器,访问时间为一个时钟周期。从而实 现了单时钟周期的ALU 操作。在典型的ALU 操作中,两个位于寄存器文件中的操作数同 时被访问,然后执行运算,结果再被送回到寄存器文件。整个过程仅需一个时钟周期。 寄存器文件里有6 个寄存器可以用作3 个16 位的间接寻址寄存器指针以寻址数据空间, 实现高效的地址
[单片机]