博文
〖004〗模60计数器BCD码输出 [AHDL](2006-10-02 10:22:00)
摘要:qh[3..0]、ql[3..0]分别输出高位和低位的BCD码。
subdesign bcd_m60
(
clk, cr, en : input;
qh[3..0], ql[3..0], c0 : output;
)
variable
counth[3..0], countl[3..0]: dff;
begin
counth[].clk = clk;
countl[].clk = clk;
counth[].clrn = cr;
countl[].clrn = cr;
qh[] = counth[];
ql[] = countl[];
if en then
if countl[] < 9 then
countl[] = countl[] + 1;
counth[] = counth[];
c0 = gnd;
......
〖004〗 7段译码器 [AHDL](2006-09-27 17:13:00)
摘要:课上老师讲的, 真值表方式:
SUBDESIGN 7seg
(
i[3..0] : INPUT;
a, b, c, d, e, f, g : OUTPUT;
)
BEGIN
TABLE
i[3..0] => a, b, c, d, e, f, g;
0 => 0, 0, 0, 0, 0, 0, 1;
1 => 1, 0, 0, 1, 1, 1, 1;
2 => 0, 0, 1, 0, 0, 1, 0;
3 => 0, 0, 0, 0, 1, 1, 0;
4 => 1, 0, 0, 1, 1, 0, 0;
5 => 0, 1, 0, 0, 1, 0, 0;
&......
<012> WinAVR中sbi()和cbi()函数编译报错的解决(2006-09-13 17:58:00)
摘要:今天在用WinAVR的20050214版本时发现编译无法通过,不能识别sbi()和cbi()函数。论坛里查了一下,原来是这个版本里没有定义这两个函数。(查看 帖1, 帖2)
看了一下, 大概有三种方法解决:
<1>
#ifndef sbi
#define sbi(reg,bit) reg |= (_BV(bit))
#endif
#ifndef cbi
#define cbi(reg,bit) reg &= ~(_BV(bit))
#endif
<2>
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
<3>
#define sbi(x, y) (x |= (1 << y)) /*置位寄器x的第y位*/
#define clr(x, y) (x &= ~(1 <<y )) /*清零寄器x的第y位*/
★其实前两种方法追根溯源还是用的第三种方法, 因为_BV是用<<定义的。 可以在WinAVR的安装目录下\include\avr中找到一个sfr_defs.h文件,里面有对_BV的定义:
#define _BV(bit) (1 << (bit))
觉得还是用第3种方法比较直观, 也是本质, 所以决定以后就用它定义。
......
<011> TCCR0 值与计数器0触发条件的关系 [AVR](2006-09-08 13:40:00)
摘要: 所谓计数器,即是在规定时间内对输入信号的脉冲个数进行计算的模块。PB0为计数器0的输入端口,因此,使用计数器时,必须将PB0设为输入。计数器的使用与定时器十分相似,每次输入信号的上升沿(或下降沿)出现时,TCNT0就自加,当自加到0xFF以后,再次自加就会溢出。与定时器一样,TCNT0溢出时TIFR中的TOV0就置1。
输入信号是上升沿还是下降沿触发计数器,是由TCCR0控制的。
┌─────┬──────────────┐
ㄧ TCCR0 值 ㄧ 触发方式 ㄧ
├─────┼──────────────┤
ㄧ 5 ㄧ 输入信号的下降沿触发计数器 ㄧ
├─────┼──────────────┤
ㄧ 6 ㄧ 输入信号的上升沿触发计数器 ㄧ
└─────┴──────────────┘
《AVR单片机与CPLD/FPGA综合应用入门》......
<010> TCCR0 与预分频数的关系 [AVR](2006-09-07 13:17:00)
摘要:所谓"预分频",就是该时钟是由晶振时钟分频得到的。预分频数可以是1、8、64、256、1024。假设预分频数为8,则每8个晶振时钟周期后,TCNT0的值自加1。预分频数由寄存器TCCR0控制。
┌─────┬─────────┐
ㄧ TCCR0 值 ㄧ 预分频后时钟频率 ㄧ
├─────┼─────────┤
ㄧ 1 ㄧ fosc ㄧ
├─────┼─────────┤
ㄧ 2 ㄧ fosc/8 ㄧ
├─────┼─────────┤
ㄧ 3 ㄧ fosc/64 ㄧ
├─────┼─────────┤
ㄧ 4 ㄧ fosc/256 ㄧ
├─────┼─────────┤
ㄧ 5 ㄧ fosc/1024 ㄧ
└─────┴─────────┘
《AVR单片机与CPLD/FPGA综合应用入门》......
<009> MCUCR 中关于INT0的中断触发条件 [AVR](2006-09-07 13:02:00)
摘要:ATmega16L 共有3个外部中断(INT0:PD2,INT1:PD3,INT2:PB2),MCUCR寄存器可以控制外部中断的触发条件(INT2只能沿触发)。MCUCR中的ISC01和ISC00用来控制INT0的中断触发条件。
┌────┬────┬───────────────────────┐
ㄧ ISC11 ㄧ ISC10 ㄧ 说明 ㄧ
├────┼────┼───────────────────────┤
ㄧ 0 ㄧ 0 ㄧINT0上的低电平产生中断请求 ㄧ
├────┼────┼───────────────────────┤
ㄧ 0 ㄧ 1 ㄧINT0上的电平变化(高到低或低到高)产生中断请求 ㄧ
├────┼────┼───────────────────────┤
ㄧ 1 ㄧ 0 ㄧINT0上的下降沿产生中断请求 &n......
<008> MCUCR 中关于INT1的中断触发条件 [AVR](2006-09-07 12:59:00)
摘要:ATmega16L 共有3个外部中断(INT0:PD2,INT1:PD3,INT2:PB2),MCUCR寄存器可以控制外部中断的触发条件(INT2只能沿触发)。MCUCR中的ISC11和ISC10用来控制INT1的中断触发条件。
┌────┬────┬───────────────────────┐
ㄧ ISC11 ㄧ ISC10 ㄧ 说明 ㄧ
├────┼────┼───────────────────────┤
ㄧ 0 ㄧ 0 ㄧINT1上的低电平产生中断请求 ㄧ
├────┼────┼───────────────────────┤
ㄧ 0 ㄧ 1 ㄧINT1上的电平变化(高到低或低到高)产生中断请求 ㄧ
├────┼────┼───────────────────────┤
ㄧ 1 ㄧ 0 ㄧINT1上的下降沿产生中断请求 &n......
<005> GCC中的整型类型名 [AVR](2006-09-07 12:03:00)
摘要:标准C的变量类型一般都适用于单片机的C语言,如char、float、double、unsigned int 等。经常使用的整型在头文件 <inttypes.h> 中作了定义。
┌──────┬──────┬──────────────┐
ㄧ 类型名 ㄧ 长度/字节 ㄧ 数值范围 ㄧ
├──────┼──────┼──────────────┤
ㄧ int8_t ㄧ 1( 8 bits) ㄧ -128~127 ㄧ
├──────┼──────┼──────────────┤
ㄧ uint8_t ㄧ 1( 8 bits) ㄧ 0~255 ㄧ
├──────┼──────┼──────────────┤
ㄧ int16_t ㄧ 2(16 bits) ㄧ -32768~32767 ㄧ
├──────┼──────┼──────────────┤
ㄧ uint16_t ㄧ 2(16 bits) ㄧ 0~655......
<004> 高阻、上拉、下拉(2006-09-07 12:01:00)
摘要: 所谓高阻,可以简单理解为输出端处于浮空状态(没有电流流动),其电平随外部电平高低而定,即门电路放弃对输出端电路的控制。而上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。下拉同理,只不过上拉是对器件注入电流,下拉是输出电流。至于弱上拉和强上拉,只是上拉电阻的阻值不同,没有什么严格区分。简言之,上拉就是在端口没有输入的情况下,将端口的电平稳定在高电平。
《AVR单片机与CPLD/FPGA综合应用入门》......
<002> 时钟源与熔丝位的关系 [AVR](2006-09-07 11:57:00)
摘要:┌────────────┬──────────┐
ㄧ 时钟源 ㄧ 熔丝位 CKSEL3..0 ㄧ
├────────────┼──────────┤
ㄧ 外部晶体/陶瓷振荡电路 ㄧ 1111~1010 ㄧ
├────────────┼──────────┤
ㄧ 外部低频晶体振荡器 ㄧ 1001 ㄧ
├────────────┼──────────┤
ㄧ 外部RC振荡器 ㄧ 1000~0101 ㄧ
├────────────┼──────────┤
ㄧ 内部RC振荡器 ㄧ 0100~0001 ㄧ
├────────────┼──────────┤
ㄧ 外部时钟 ㄧ 0000 ㄧ
└────────────┴───......