1056931 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

緑のボタンを押せ! Press the green button

緑のボタンを押せ! Press the green button

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Category

Keyword Search

▼キーワード検索

Archives

2024.04
2024.03
2024.02
2024.01
2023.12

Comments

 effelpist@ kilovermek.es effelpist &lt;a href=&quot; <small> <a href="http…
 Jun@ Re:「いっちゅう」さんのiEPG用ソフト入れてみた(09/15) TVdeIEPG Ver.1.2.1.0がリンク切れしてい…
 スター@ Re:hauppauge HD PVR 速報(08/25) スタービーチ <small> <a href="http://c…
 ASOBO@ Re:hauppauge HD PVR 速報 ASOBO攻略 <small> <a href="http:/…
 ハッピーメール@ Re:hauppauge HD PVR 速報 ハッピーメール <small> <a href="http:/…

Freepage List

Favorite Blog

まだ登録されていません
2007.10.03
XML
テーマ:電子工作(533)
カテゴリ:電子工作
HI-TECH SoftwareのPIC用cコンパイラのフリー版(以下、PICC-Lite)の新しい版v9.60PL1がリリースされていたので、拾ってきた。Vista対応になったそうである。インストールして、マニュアルをナナメ読みしてみて、面白そうなので、ちょっと実験。
もとのソフトは、以前使った、MicroChipのWebページに掲載されているプログラム
http://www.microchip.co.jp/seminar/200203/jisshuu.pdf
。これを適当にcで書き直したもの(最後に載せました)。もとのアセンブラのプログラムが130行程度ですが、こちらは80行にも満たない量です。それより、読みやすいですねー、やっぱり。
PIC16F84互換プロセッサでのシミュレーション実行結果はこんな感じ。
WaveInC.JPG
54行目で、ループの待ち時間をオリジナルより短くしているので、アセンブラ版
http://plaza.rakuten.co.jp/pressgreenbutton/diary/200709150000/
より、LED(PORTB)の点滅は速くなっています。オリジナルのアセンブラのプログラムに似せて、変数flagは構造体にして、bitを扱っています。

それにしても、cを使うのは実に13年半ぶり。そのころは、MS-CでMS-DOS用のプログラムだったので、volatile修飾子とか使うのは初めてです。変数flagの初期化もオリジナルのアセンブラのプログラムに似せて、むりむりcastしてます(44行目)が、こういうcastの書き方もやり方をほとんど忘れてしまっていて、思い出すのにちょっと苦労してしまいました。トシはとりたくないものです(笑)。
----
本日の御託
急に涼しくなって、体調を崩しかけていたので、アルコール消毒を実施(早い話、呑みに行ったのだ)したが、効果なし。かえって調子悪し…


1 //
2 // (c) 2007 Bakaoyaji
3 // The original version is from microchip
4 // http://www.microchip.co.jp/seminar/200203/jisshuu.pdf
5
6 #include "pic.h"
7
8 #define PORTB_INIT (0x01)
9 // #define DEB_INIT (200)
10 #define DEB_INIT (3)
11
12 unsigned char portb_out, deb_cnt, cnt0, cnt1 ;
13 volatile struct {
14     unsigned shift : 1 ;
15     unsigned hit : 1 ;
16 } flag ;
17
18 void ioport(void) ;
19 void delay( unsigned char ) ;
20
21 static void interrupt isr(void) {
22      if(T0IF) {
23           T0IF = 0 ;
24           if( !(PORTA & 0x01 )) { // key press
25               if( !flag.hit ) {
26                    if( --deb_cnt == 0 ) {
27                         flag.hit = 1 ;
28                         flag.shift = flag.shift ^ 1 ;
29                    }
30               }
31           } else { // key release
32               flag.hit = 0 ;
33               deb_cnt = DEB_INIT ;
34           } // else
35      }
36 } // isr
37
38 void main(void) {
39      portb_out = 0 ;
40      ioport() ;
41      OPTION = 0xd0 ; // bank1
42      // flag.shift = 0 ;
43      // flag.hit = 0 ;
44      *( (unsigned char * ) &flag ) = 0x00 ;
45      deb_cnt = DEB_INIT ;
46      portb_out = PORTB_INIT ;
47      TMR0 = 0 ;
48      INTCON = 0xa0 ;
49      while (1) {
50          CLRWDT() ;
51          ioport() ;
52          delay( 40) ; // delay( 150) ;
53          if( !flag.shift ) {
54              continue ;
55          }
56          portb_out <<= 1 ;
57          if( portb_out == 0 ) {
58              portb_out = PORTB_INIT ;
59          }
60      } // while
61 } // main()
62
63 void ioport(void) {
64     PORTA = 0 ;
65     PORTB = portb_out ;
66     TRISA = 0x01 ; // bank1
67     TRISB = 0x00 ; // bank1
68 } // ioprt()
69
70 void delay( unsigned char d) {
71     cnt0 = d ;
72     do {
73         cnt1 = 0 ;
74         do {
75             asm("nop") ;
76         } while ( --cnt1!=0 ) ;
77     } while( --cnt0 !=0 ) ;
78 } // delay()





お気に入りの記事を「いいね!」で応援しよう

Last updated  2007.10.04 20:51:08
コメント(3) | コメントを書く



© Rakuten Group, Inc.