博文

〖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;
   ......

阅读全文(5736) | 评论:1

〖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;
 &......

阅读全文(4100) | 评论: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种方法比较直观, 也是本质, 所以决定以后就用它定义。
......

阅读全文(6324) | 评论: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综合应用入门》......

阅读全文(4849) | 评论:0

<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综合应用入门》......

阅读全文(4502) | 评论:0

<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......

阅读全文(4171) | 评论:0

<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......

阅读全文(4170) | 评论:0

<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......

阅读全文(3132) | 评论:0

<004> 高阻、上拉、下拉(2006-09-07 12:01:00)

摘要:    所谓高阻,可以简单理解为输出端处于浮空状态(没有电流流动),其电平随外部电平高低而定,即门电路放弃对输出端电路的控制。而上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。下拉同理,只不过上拉是对器件注入电流,下拉是输出电流。至于弱上拉和强上拉,只是上拉电阻的阻值不同,没有什么严格区分。简言之,上拉就是在端口没有输入的情况下,将端口的电平稳定在高电平。

《AVR单片机与CPLD/FPGA综合应用入门》......

阅读全文(4385) | 评论:2

<002> 时钟源与熔丝位的关系 [AVR](2006-09-07 11:57:00)

摘要:┌────────────┬──────────┐
ㄧ    时钟源              ㄧ  熔丝位 CKSEL3..0  ㄧ
├────────────┼──────────┤
ㄧ 外部晶体/陶瓷振荡电路  ㄧ    1111~1010      ㄧ
├────────────┼──────────┤
ㄧ 外部低频晶体振荡器     ㄧ    1001            ㄧ
├────────────┼──────────┤
ㄧ 外部RC振荡器           ㄧ    1000~0101      ㄧ
├────────────┼──────────┤
ㄧ 内部RC振荡器           ㄧ    0100~0001      ㄧ
├────────────┼──────────┤
ㄧ 外部时钟               ㄧ    0000            ㄧ
└────────────┴───......

阅读全文(3494) | 评论:1