推荐阅读最新更新时间:2024-11-10 17:03
AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02
二、ATMEGA16的中断系统 二—(02)、4*4行列式按键的睡眠模式中断唤醒 废话不多说了,上一篇有这一片所用的寄存器,所以你要想看这篇,还是建议看看上一篇 ,当然要是会~~~ 直接上图~~~ 好了,下面的就是程序了(这里要注意一下,Proteus中的二极管的作用,一定要弄明白~~呵呵,虽然我不明白~~笨死了~~但是有一点我是知道的,防止回流,但是为什么这么接~~我蛋疼了~~不会啊) //------------------------------------------------------------------------------ //4*4行列式按键的睡眠模式中断唤醒实验 //其中睡眠模式再 intri
[单片机]
Keil C51程序设计中精确延时的总结
一、实现延时的两种方法 1、硬件延时 优点:用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时; 缺点:往往在精度要求不是很高时,会使定时器/计数器大材小用,而且很极端时,定时器根本不够的。 2、软件延时 优点:节省硬件资源的同时,只要正确使用可接近要求的精度,这种方法主要采用循环体进行; 缺点:精度不高,对编程者经验要求甚高。 二、硬件延时 1、常用晶振:11.059 2 MHz(容易产生各种标准的波特率)、12 MHz或6 MHz(机器周期 分别为1 μs和2 μs,便于精确延时)。 2、本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达2的16次方=65 536 。若定时器工作在
[单片机]
AVR单片机(学习ing)—(十)、ATMEGA16的同步串行接口SPI—02
1)那就是在之前的介绍中说过,在说一遍~~ 主机和从机的两个移位寄存器可以被认为是一个公开的16位环形移位寄存器,当数据从主机移向从机时,同时从机饿数据也向相反的放向移向主机。这就意味着在一个以为周期内,主机和从机的数据进行了交换。(不过这个例子里没有用到这个,下个会用到~~呵呵~~),早知道对谁都好~~ 2)配置为SPI主机时,SPI接口不自动控制SS引脚,必须由用户软件来处理。还有配置为从机时,只要SS引脚为高,SPI接口将一直保持睡眠状态,并保持MISO为三态。(这个章节的第一篇文章有详细的介绍~~自己可以看看~~) 3)SPI系统的发送方向只有一个缓冲器,而接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束
[单片机]
stm32的微秒延时程序
我的stm32系统时钟为72MHZ,用软件延时方法实现微秒级的延时,既空循环: 延时函数为: #define delayUs(x) { unsigned int _dcnt; \ _dcnt=(x*16); \ while(_dcnt-- 0) \ { continue; }\ } x---------为延时时间(单位为us) 其中_dcnt=(x*16); 中的16,是可以改的,改为8的时候延时间时间为x*0.5。
[单片机]
ATmega16定时器1的时间设定
在Atmel Studio 7环境下编写程序感觉比较舒服。 目的:根据设定的时间触发中断,触发一次,变量累加一次; 用到中断,所以一开始需要#include 变量:unsigned char time = 0; 定时器1配置: void ConfigTimer1(unsigned int set) { TCCR1B |= (1 2);//256分频 比如12M ,就是12000000/256 tmp = 65536-set;//set=( 晶振频率/分频) * 定时时间) TCNT1H = (unsigned char)(tmp 8);//赋初值 高8位 TCNT1L = (uns
[单片机]
ATmega16 掉电检测
ATmega16 具有片内BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检测工作过程中VCC 的变化。此触发电平通过熔丝位BODLEVEL 来设定, 2.7V(BODLEVEL 未编程),4.0V (BODLEVEL 已编程)。BOD 的触发电平具有迟滞功能以消除电源尖峰的影响。这个迟滞功能可以解释为VBOT+ = VBOT + VHYST/2 以及VBOT- = VBOT- VHYST/2。 BOD 电路的开关由熔丝位BODEN控制。当BOD使能后(BODEN被编程),一旦VCC下降到触发电平以下(VBOT-, Figure 19), BOD 复位立即被激发。当VCC 上升到触发电平以上时
[单片机]
单片机1s延时程序
#include reg52.h sbit P1_0 = P1^0; void Delay(); // 下面引用时一定要和这里的大小写一致否则会有警告或错误 void Main() { while (1) // 开始一直循环 { P1_0 = 0; Delay(); // 没有参数也要加 () 否则会有Warning P1_0 = 1; Delay(); } } void Delay() // 12M晶振1s延时 { unsigned char h, i, j, k; for (h = 5; h 0; h--) for (i = 4; i 0; i--) for (j = 116; j 0; j--) for (k = 21
[单片机]
ATmega16驱动ds12c887显示于lcd1602
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define DS_ PORTC&=~BIT(6) #define DS PORTC|=BIT(6) #define RW_ PORTC&=~BIT(5) #define RW PORTC|=BIT(5) #define AS_ PORTC&=~BIT(4) #define AS PORTC|=BIT(4) #define CS_ PORTC&=~BIT(3) #define CS PORTC|=BIT(3) uchar tab1 ={"DAT:"};
[单片机]