打印
[PIC®/AVR®/dsPIC®产品]

如何读写寄存器

[复制链接]
1400|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
reverse_L0111|  楼主 | 2016-6-4 11:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问PIC单片机如何读写寄存器,有没有相关例程,谢谢!
沙发
zhanzr21| | 2016-6-5 16:12 | 只看该作者
C語言例子:
uint16_t ADC_Read10bit(ADC_CHANNEL channel)
{
    uint16_t result;

    switch(channel)
    {
        case ADC_CHANNEL_3:
            break;
        default:
            return 0xFFFF;
    }

    ADCHS0H = (channel & 0xFF);
    ADCHS0L = (channel & 0xFF);

    ADCON1Lbits.SAMP = 1;           // Start AD sampling/convert sequence
    while(ADCON1Lbits.DONE == 0);   // Wait for result complete

    result = ADCBUF3H;
    result <<=8;
    result |= ADCBUF3L;

    return result;
}


ASM例子:

        list p=18f452

        ; Include file, change directory if needed
        include "p18f452.inc"


        ; Start at the reset vector
Reset_Vector  code 0x000
        goto Start

        ; Start application beyond vector area

        code        0x002A
Start
        clrf        PORTB                ;Clear PORTB
        clrf        TRISB                ;PORTB all outputs, display 4 MSB's
                                ;of A/D result on LEDs

        movlw        B'01000001'        ;Fosc/8, A/D enabled
        movwf        ADCON0
        movlw        B'00001110'        ;Left justify,1 analog channel
        movwf        ADCON1                ;VDD and VSS references

        movlw        B'11000111'        ;TMR0 prescaler, 1:256
        movwf        T0CON

Main
        btfss        INTCON,TMR0IF        ;Wait for Timer0 to timeout
        goto        Main
        bcf        INTCON,TMR0IF

        bsf        ADCON0,GO        ;Start A/D conversion
Wait
        btfss        PIR1,ADIF        ;Wait for conversion to complete
        goto        Wait

        swapf        ADRESH,W        ;Swap A/D result nibbles
        andlw        0x0f                ;Mask off lower 4 bits
        movwf        PORTB                ;Write A/D result to PORTB

        clrf        PORTB
WaitPush                        ;Pause while switch is pressed
        btfss        PORTA,4
        goto        WaitPush

        movwf        PORTB
        goto        Main                ;Do it again

        end


其時好簡單的,多用過幾次就可以了

使用特权

评论回复
板凳
reverse_L0111|  楼主 | 2016-6-7 08:09 | 只看该作者

这个是特殊功能寄存器啊,有没有读写通用寄存器的,就是告诉一个地址,向这个地址的寄存器读或者写数据,谢谢!

使用特权

评论回复
地板
NE5532| | 2016-6-7 11:00 | 只看该作者
把特殊寄存器名字换成你要操作的地址就可以了,嫌写地址烦,就定义一个变量伪定义到这个地址上。另外还可以使用SFR指针操作。

使用特权

评论回复
5
zhanzr21| | 2016-6-7 16:21 | 只看该作者
reverse_L0111 发表于 2016-6-7 08:09
这个是特殊功能寄存器啊,有没有读写通用寄存器的,就是告诉一个地址,向这个地址的寄存器读或者写数据, ...
ReadVal = *(char*)(0x11);
*(char*)(0x12) = WriteVal;

使用特权

评论回复
6
reverse_L0111|  楼主 | 2016-6-8 10:38 | 只看该作者
NE5532 发表于 2016-6-7 11:00
把特殊寄存器名字换成你要操作的地址就可以了,嫌写地址烦,就定义一个变量伪定义到这个地址上。另外还可以 ...

原来是这样,谢谢!

使用特权

评论回复
7
reverse_L0111|  楼主 | 2016-6-8 10:39 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

76

帖子

0

粉丝