番外 ATTINY13A ソフトシリアル
ATTINY13Aで84ワードのブートローダーを検討する過程で、
AVLのアプリケーションノート AVR305: Half Duplex Compact Software UART
を元にATTINY13Aソフトシリアルのコード短縮を検討しました。(2014.05.20加筆修正)
<結果>
オリジナルコード32ワードから4ワード低減でき、これを用いて
ATTINY13Aで84ワードのブートローダーを作成することができました。
以下に両者のコードを比較し、記載します。
以下のコードを使用する上でATTINYのクロックを知り補正を行なう必要があります。
検討したコードのビットディレイの定数はクロック9.6MHz+9600bpsの値です。
(2014.03.08加筆)---------------------------------
ボーレートやクロックの変更に対応するための修正
.equ xtal = 8000000 ;Hz
.equ baud = 19200 ;bps
などと定義し、bwait2のldiの行を赤文字のように変更してください。
低ボーレートの場合、(xtal/baud-22)/6の値が256より大きくなる条件は設定できません。
(bwait2のサブルーチンを作り直す必要があります。)
bwait: ; wait 1 bit
rcall bwait2 ;3+493+493=989
bwait2: ; wait 1/2bit
ldi rs,(xtal/baud-22)/6 ;1
subi rs,1 ;1
brne PC-1 ;2/1
ret ;4 1+(1+2)*163-1+4=493
-------------------------------------------------------------------------------
ATTINY13Aの84ワードのブートローダーはこちらからダウンロードできます。
ttp://sourceforge.net/p/tinypicbootload/discussion/general/thread/24e44bca/
Tiny_Avr-Pic_Bootloader+ (v0.8.3.1).zip
<avr305オリジナルコード>
.def bitcnt =R16 ;bit counter
.def temp =R17 ;temporary storage register
.def Txbyte =R18 ;Data to be transmitted
.def RXbyte =R19 ;Received data
;***************************************************************************
;*
;* "putchar"
;*
;* This subroutine transmits the byte stored in the "Txbyte" register
;* The number of stop bits used is set with the sb constant
;*
;* Number of words :14 including return
;* Number of cycles :Depens on bit rate
;* Low registers used :None
;* High registers used :2 (bitcnt,Txbyte)
;* Pointers used :None
;*
;***************************************************************************
putchar:
ldi bitcnt,9+sb ;1+8+sb (sb is # of stop bits)
com Txbyte ;Inverte everything
sec ;Start bit
putchar0:
brcc putchar1 ;If carry set
cbi PORTD,TxD ; send a '0'
rjmp putchar2 ;else
putchar1:
sbi PORTD,TxD ; send a '1'
nop
putchar2:
rcall UART_delay ;One bit delay
rcall UART_delay
lsr Txbyte ;Get next bit
dec bitcnt ;If not all bit sent
brne putchar0 ; send next
;else
ret ; return
;***************************************************************************
;*
;* "getchar"
;*
;* This subroutine receives one byte and returns it in the "Rxbyte" register
;*
;* Number of words :14 including return
;* Number of cycles :Depens on when data arrives
;* Low registers used :None
;* High registers used :2 (bitcnt,Rxbyte)
;* Pointers used :None
;*
;***************************************************************************
getchar:
ldi bitcnt,9 ;8 data bit + 1 stop bit
getchar1:
sbic PIND,RxD ;Wait for start bit
rjmp getchar1
rcall UART_delay ;0.5 bit delay
getchar2:
rcall UART_delay ;1 bit delay
rcall UART_delay
clc ;clear carry
sbic PIND,RxD ;if RX pin high
sec ;
dec bitcnt ;If bit is stop bit
breq getchar3 ; return
;else
ror Rxbyte ; shift bit into Rxbyte
rjmp getchar2 ; go get next
getchar3:
ret
;***************************************************************************
;*
;* "UART_delay"
;*
;* This delay subroutine generates the required delay between the bits when
;* transmitting and receiving bytes. The total execution time is set by the
;* constant "b":
;*
;* 3キb + 7 cycles (including rcall and ret)
;*
;* Number of words :4 including return
;* Low registers used :None
;* High registers used :1 (temp)
;* Pointers used :None
;*
;***************************************************************************
UART_delay:
ldi temp,b
UART_delay1:
dec temp
brne UART_delay1
ret
<検討したコード>
.def rs =R17 ;ビットディレイカウンター
.def cn =R18 ;ビットループカウンター
.def rxd =R19 ;送受信バッファー
#define TX 4 ; ATTINY13A TX Data output pin (i.e. 2 = PORTB,2)
#define RX 3 ; ATTINY13A RX Data input pin (i.e. 3 = PORTB,3)
#define Direct_TX ; RS-232C TX Direct Connection(No use MAX232)
#define Direct_RX ; RS-232C RX Direct Connection(No use MAX232)
SBI DDRB,TX ; set TX Port
; ********************************************************************
;
; RS-232C Send 1byte
;
; rxdに値をセットして呼び出す(13ワード)
;
; ********************************************************************
PUTC:
#ifdef Direct_TX
CBI PORTB,TX
#else
SBI PORTB,TX
#endif
LDI cn,1+8+1 ; 10-bit Data
COM rxd ; Data inverce
RJMP PC+5 ; Start bit
LSR rxd ; shift right LSB to Carry [1]
#ifdef Direct_TX
brcs PC+2 ; [2/1]
cbi PORTB,TX ; set TX='0' if Carry='0' [2]
brcc PC+2 ; [2/1]
sbi PORTB,TX ; set TX='1' if Carry='1' [2]
#else
brcs PC+2
sbi PORTB,TX ; set TX='1' if Carry='0'
brcc PC+2
cbi PORTB,TX ; set TX='0' if Carry='1'
#endif
rcall bwait ; wait 1 bit [992]
dec cn ; [1]
brne PC-7 ; [2] 1+7+992+1+2=1003
ret
; ********************************************************************
;
; RS-232C Recieve 1byte
;
; 受信データはrxdに返る(14ワード)
;
; ********************************************************************
GETC:
#ifdef Direct_RX
SBIS PINB,RX
#else
SBIC PINB,RX
#endif
RJMP PC-1
LDI rxd,0x80 ; rxd='10000000'
RCALL bwait2 ; wait 1/2 bit
RCALL bwait ; wait 1 bit and set Carry=0 [992]
#ifdef Direct_RX
SBIS PINB,RX ; [2/3]
#else
SBIC PINB,RX
#endif
SEC ; [1]
ROR rxd ; set Data [1]
BRCC PC-4 ; [2] 992+3+1+1+2=999
bwait: ; wait 1 bit
rcall bwait2 ;3+493+493=989
bwait2: ; wait 1/2bit
ldi rs,163 ;1
subi rs,1 ;1
brne PC-1 ;2/1
ret ;4 1+(1+2)*163-1+4=493
.
AVLのアプリケーションノート AVR305: Half Duplex Compact Software UART
を元にATTINY13Aソフトシリアルのコード短縮を検討しました。(2014.05.20加筆修正)
<結果>
オリジナルコード32ワードから4ワード低減でき、これを用いて
ATTINY13Aで84ワードのブートローダーを作成することができました。
以下に両者のコードを比較し、記載します。
以下のコードを使用する上でATTINYのクロックを知り補正を行なう必要があります。
検討したコードのビットディレイの定数はクロック9.6MHz+9600bpsの値です。
(2014.03.08加筆)---------------------------------
ボーレートやクロックの変更に対応するための修正
.equ xtal = 8000000 ;Hz
.equ baud = 19200 ;bps
などと定義し、bwait2のldiの行を赤文字のように変更してください。
低ボーレートの場合、(xtal/baud-22)/6の値が256より大きくなる条件は設定できません。
(bwait2のサブルーチンを作り直す必要があります。)
bwait: ; wait 1 bit
rcall bwait2 ;3+493+493=989
bwait2: ; wait 1/2bit
ldi rs,(xtal/baud-22)/6 ;1
subi rs,1 ;1
brne PC-1 ;2/1
ret ;4 1+(1+2)*163-1+4=493
-------------------------------------------------------------------------------
ATTINY13Aの84ワードのブートローダーはこちらからダウンロードできます。
Tiny_Avr-Pic_Bootloader+ (v0.8.3.1).zip
<avr305オリジナルコード>
.def bitcnt =R16 ;bit counter
.def temp =R17 ;temporary storage register
.def Txbyte =R18 ;Data to be transmitted
.def RXbyte =R19 ;Received data
;***************************************************************************
;*
;* "putchar"
;*
;* This subroutine transmits the byte stored in the "Txbyte" register
;* The number of stop bits used is set with the sb constant
;*
;* Number of words :14 including return
;* Number of cycles :Depens on bit rate
;* Low registers used :None
;* High registers used :2 (bitcnt,Txbyte)
;* Pointers used :None
;*
;***************************************************************************
putchar:
ldi bitcnt,9+sb ;1+8+sb (sb is # of stop bits)
com Txbyte ;Inverte everything
sec ;Start bit
putchar0:
brcc putchar1 ;If carry set
cbi PORTD,TxD ; send a '0'
rjmp putchar2 ;else
putchar1:
sbi PORTD,TxD ; send a '1'
nop
putchar2:
rcall UART_delay ;One bit delay
rcall UART_delay
lsr Txbyte ;Get next bit
dec bitcnt ;If not all bit sent
brne putchar0 ; send next
;else
ret ; return
;***************************************************************************
;*
;* "getchar"
;*
;* This subroutine receives one byte and returns it in the "Rxbyte" register
;*
;* Number of words :14 including return
;* Number of cycles :Depens on when data arrives
;* Low registers used :None
;* High registers used :2 (bitcnt,Rxbyte)
;* Pointers used :None
;*
;***************************************************************************
getchar:
ldi bitcnt,9 ;8 data bit + 1 stop bit
getchar1:
sbic PIND,RxD ;Wait for start bit
rjmp getchar1
rcall UART_delay ;0.5 bit delay
getchar2:
rcall UART_delay ;1 bit delay
rcall UART_delay
clc ;clear carry
sbic PIND,RxD ;if RX pin high
sec ;
dec bitcnt ;If bit is stop bit
breq getchar3 ; return
;else
ror Rxbyte ; shift bit into Rxbyte
rjmp getchar2 ; go get next
getchar3:
ret
;***************************************************************************
;*
;* "UART_delay"
;*
;* This delay subroutine generates the required delay between the bits when
;* transmitting and receiving bytes. The total execution time is set by the
;* constant "b":
;*
;* 3キb + 7 cycles (including rcall and ret)
;*
;* Number of words :4 including return
;* Low registers used :None
;* High registers used :1 (temp)
;* Pointers used :None
;*
;***************************************************************************
UART_delay:
ldi temp,b
UART_delay1:
dec temp
brne UART_delay1
ret
<検討したコード>
.def rs =R17 ;ビットディレイカウンター
.def cn =R18 ;ビットループカウンター
.def rxd =R19 ;送受信バッファー
#define TX 4 ; ATTINY13A TX Data output pin (i.e. 2 = PORTB,2)
#define RX 3 ; ATTINY13A RX Data input pin (i.e. 3 = PORTB,3)
#define Direct_TX ; RS-232C TX Direct Connection(No use MAX232)
#define Direct_RX ; RS-232C RX Direct Connection(No use MAX232)
SBI DDRB,TX ; set TX Port
; ********************************************************************
;
; RS-232C Send 1byte
;
; rxdに値をセットして呼び出す(13ワード)
;
; ********************************************************************
PUTC:
#ifdef Direct_TX
CBI PORTB,TX
#else
SBI PORTB,TX
#endif
LDI cn,1+8+1 ; 10-bit Data
COM rxd ; Data inverce
RJMP PC+5 ; Start bit
LSR rxd ; shift right LSB to Carry [1]
#ifdef Direct_TX
brcs PC+2 ; [2/1]
cbi PORTB,TX ; set TX='0' if Carry='0' [2]
brcc PC+2 ; [2/1]
sbi PORTB,TX ; set TX='1' if Carry='1' [2]
#else
brcs PC+2
sbi PORTB,TX ; set TX='1' if Carry='0'
brcc PC+2
cbi PORTB,TX ; set TX='0' if Carry='1'
#endif
rcall bwait ; wait 1 bit [992]
dec cn ; [1]
brne PC-7 ; [2] 1+7+992+1+2=1003
ret
; ********************************************************************
;
; RS-232C Recieve 1byte
;
; 受信データはrxdに返る(14ワード)
;
; ********************************************************************
GETC:
#ifdef Direct_RX
SBIS PINB,RX
#else
SBIC PINB,RX
#endif
RJMP PC-1
LDI rxd,0x80 ; rxd='10000000'
RCALL bwait2 ; wait 1/2 bit
RCALL bwait ; wait 1 bit and set Carry=0 [992]
#ifdef Direct_RX
SBIS PINB,RX ; [2/3]
#else
SBIC PINB,RX
#endif
SEC ; [1]
ROR rxd ; set Data [1]
BRCC PC-4 ; [2] 992+3+1+1+2=999
bwait: ; wait 1 bit
rcall bwait2 ;3+493+493=989
bwait2: ; wait 1/2bit
ldi rs,163 ;1
subi rs,1 ;1
brne PC-1 ;2/1
ret ;4 1+(1+2)*163-1+4=493
.
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT