[PIC®/AVR®/dsPIC®产品] 如何读写寄存器

[复制链接]
1578|6
 楼主| reverse_L0111 发表于 2016-6-4 11:54 | 显示全部楼层 |阅读模式
请问PIC单片机如何读写寄存器,有没有相关例程,谢谢!
zhanzr21 发表于 2016-6-5 16:12 | 显示全部楼层
C語言例子:
  1. uint16_t ADC_Read10bit(ADC_CHANNEL channel)
  2. {
  3.     uint16_t result;

  4.     switch(channel)
  5.     {
  6.         case ADC_CHANNEL_3:
  7.             break;
  8.         default:
  9.             return 0xFFFF;
  10.     }

  11.     ADCHS0H = (channel & 0xFF);
  12.     ADCHS0L = (channel & 0xFF);

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

  15.     result = ADCBUF3H;
  16.     result <<=8;
  17.     result |= ADCBUF3L;

  18.     return result;
  19. }


ASM例子:

  1.         list p=18f452

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


  4.         ; Start at the reset vector
  5. Reset_Vector  code 0x000
  6.         goto Start

  7.         ; Start application beyond vector area

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

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

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

  19. Main
  20.         btfss        INTCON,TMR0IF        ;Wait for Timer0 to timeout
  21.         goto        Main
  22.         bcf        INTCON,TMR0IF

  23.         bsf        ADCON0,GO        ;Start A/D conversion
  24. Wait
  25.         btfss        PIR1,ADIF        ;Wait for conversion to complete
  26.         goto        Wait

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

  30.         clrf        PORTB
  31. WaitPush                        ;Pause while switch is pressed
  32.         btfss        PORTA,4
  33.         goto        WaitPush

  34.         movwf        PORTB
  35.         goto        Main                ;Do it again

  36.         end


其時好簡單的,多用過幾次就可以了
 楼主| reverse_L0111 发表于 2016-6-7 08:09 | 显示全部楼层

这个是特殊功能寄存器啊,有没有读写通用寄存器的,就是告诉一个地址,向这个地址的寄存器读或者写数据,谢谢!
NE5532 发表于 2016-6-7 11:00 | 显示全部楼层
把特殊寄存器名字换成你要操作的地址就可以了,嫌写地址烦,就定义一个变量伪定义到这个地址上。另外还可以使用SFR指针操作。
zhanzr21 发表于 2016-6-7 16:21 | 显示全部楼层
reverse_L0111 发表于 2016-6-7 08:09
这个是特殊功能寄存器啊,有没有读写通用寄存器的,就是告诉一个地址,向这个地址的寄存器读或者写数据, ...
  1. ReadVal = *(char*)(0x11);
  2. *(char*)(0x12) = WriteVal;
 楼主| reverse_L0111 发表于 2016-6-8 10:38 | 显示全部楼层
NE5532 发表于 2016-6-7 11:00
把特殊寄存器名字换成你要操作的地址就可以了,嫌写地址烦,就定义一个变量伪定义到这个地址上。另外还可以 ...

原来是这样,谢谢!
 楼主| reverse_L0111 发表于 2016-6-8 10:39 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

76

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部