PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-05-2008, 01:55 PM   #1
doremino
Đệ tử 3 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 48
:
Post !!!cho em hỏi tí về ngắt(em dùng mikroC)!!!

cho em hỏi trong chương trình dưới đây thì "ngắt" bắt đầu từ dòng nào? và dấu hiệu nhận biết !!(chỉ luôn em cách post code nha anh!!)

CHƯƠNG TRÌNH HIỂN THỊ LED7 ĐOẠN (mạch EASYPIC4) ĐẾM SỐ TỪ 0...255!




Code:
unsigned short mask(unsigned short num)     /*ham xuat dinh dang bit cho led7*/
         {
  switch (num)
  {
    case 0 : return 0x3F;
    case 1 : return 0x06;
    case 2 : return 0x5B;
    case 3 : return 0x4F;
    case 4 : return 0x66;
    case 5 : return 0x6D;
    case 6 : return 0x7D;
    case 7 : return 0x07;
    case 8 : return 0x7F;
    case 9 : return 0x6F;
                }
           }

unsigned short i,por0,por1,j,v,por2;

void interrupt()


      {
      if(v== 0 )
          {
          PORTD=por0;
          PORTA=1;
          v= 1  ;
          }
      else if(v== 1)
          {
          PORTD=por1;
          PORTA= 2 ;
          V=2;
          }
      else if(v== 2 )
          {
          PORTD=por2;
          PORTA=4;
          V=0 ;
          }

  TMR1    = 0    ;     /*khoi tao lai gia tri trong timer0      */
  TMR1ON   = 0x20   ;    /*bat bit 05 tren thanh ghi INTCON cho phep ngat timer0 */
    }
 void main()
   {
   OPTION_REG =0X80;    /*    tat chuc nang pull-up cua portB*/
   j          =   0  ;
   v          =   0   ;
   por2       =   0x3F;
   TMR1      =   0 ;
   TRISA      =   0 ;
   PORTA      =   0  ;
   TRISD      =   0  ;
   PORTD      =   0  ;
   TMR1ON     =0x01;     /*cho phep ngat Timer0*/
       while(1)
       {
   for (i=0;i<=255;i++)               /*vong lap xuat so tu 0-255*/
        {
           j=i%10;
           por0=mask (j) ;
           j=((char)i/10)%10;
           por1=mask(j);
           j=(char)(i/100)%10;
           por2=mask(j)  ;



          delay_ms(100)       ;
        }
         }
   }

thay đổi nội dung bởi: namqn, 13-05-2008 lúc 06:19 PM.
doremino vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2008, 02:33 PM   #2
doremino
Đệ tử 3 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 48
:
em muốn hỏi là khi dịch chương trình thì chương trình chạy tới đâu thì chương trình "ngắt " được kích hoạt đó ạ!!!!!
doremino vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2008, 06:26 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi doremino View Post
cho em hỏi trong chương trình dưới đây thì "ngắt" bắt đầu từ dòng nào? và dấu hiệu nhận biết !!(chỉ luôn em cách post code nha anh!!)
...
Theo tài liệu hướng dẫn (đi kèm với phần mềm) của mikroC, từ khóa interrupt được dành riêng để khai báo cho chương trình xử lý ngắt.

Để định dạng code thì bạn có thể tô đen (chọn) đoạn code cần định dạng, rồi nhấn vào nút # ở trên thanh công cụ (nút thứ ba từ bên phải sang, hàng thứ hai). Việc làm này tương đương với việc dùng các tag [code] và [ /code] để bọc phần code cần định dạng (chú ý là trong các tag không có khoảng trắng).

Câu hỏi trong post tiếp theo của bạn không có ý nghĩa, vì chương trình ngắt không được kích hoạt khi dịch chương trình, nó chỉ được kích hoạt khi code được thực thi và có ngắt tương ứng xảy ra.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2008, 08:33 PM   #4
doremino
Đệ tử 3 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 48
:
Talking

Trích:
Nguyên văn bởi namqn View Post
Theo tài liệu hướng dẫn (đi kèm với phần mềm) của mikroC, từ khóa interrupt được dành riêng để khai báo cho chương trình xử lý ngắt.

Để định dạng code thì bạn có thể tô đen (chọn) đoạn code cần định dạng, rồi nhấn vào nút # ở trên thanh công cụ (nút thứ ba từ bên phải sang, hàng thứ hai). Việc làm này tương đương với việc dùng các tag [code] và [ /code] để bọc phần code cần định dạng (chú ý là trong các tag không có khoảng trắng).

Câu hỏi trong post tiếp theo của bạn không có ý nghĩa, vì chương trình ngắt không được kích hoạt khi dịch chương trình, nó chỉ được kích hoạt khi code được thực thi và có ngắt tương ứng xảy ra.

Thân,
ý em muốn hỏi là khi chương trình thực thi thì nó sẽ thực thi lệnh nào trước -đến đâu thì chương trình ngắt được kích hoạt ấy mà(tại em không thấy lệnh gọi hàm" interrupt " nên không hiểu hoạt động của nó)
doremino vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2008, 08:54 PM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi doremino View Post
ý em muốn hỏi là khi chương trình thực thi thì nó sẽ thực thi lệnh nào trước -đến đâu thì chương trình ngắt được kích hoạt ấy mà(tại em không thấy lệnh gọi hàm" interrupt " nên không hiểu hoạt động của nó)
Nói như vậy bạn chưa hiểu về ngắt. Ngắt nói chung có thể xảy ra tại thời điểm bất kỳ khi chương trình được thực thi. Khi có ngắt xảy ra, bộ xử lý sẽ hoàn tất lệnh hiện hành, rồi lưu địa chỉ của lệnh cần thực thi kế tiếp vào ngăn xếp (stack), sau đó nó sẽ nhảy đến địa chỉ của chương trình con xử lý ngắt (đã được quy định trước tùy theo PIC được dùng) để xử lý ngắt. Sau khi hoàn thành việc xử lý ngắt, bộ xử lý sẽ lấy lại địa chỉ lệnh cần thực thi tiếp theo đã được lưu vào ngăn xếp trước đó và tiếp tục công việc vừa bỏ dở.

Do đó, trong chương trình sẽ không có lệnh gọi chương trình con xử lý ngắt.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2008, 06:12 AM   #6
doremino
Đệ tử 3 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 48
:
Post

Trích:
Nguyên văn bởi namqn View Post
Nói như vậy bạn chưa hiểu về ngắt. Ngắt nói chung có thể xảy ra tại thời điểm bất kỳ khi chương trình được thực thi. Khi có ngắt xảy ra, bộ xử lý sẽ hoàn tất lệnh hiện hành, rồi lưu địa chỉ của lệnh cần thực thi kế tiếp vào ngăn xếp (stack), sau đó nó sẽ nhảy đến địa chỉ của chương trình con xử lý ngắt (đã được quy định trước tùy theo PIC được dùng) để xử lý ngắt. Sau khi hoàn thành việc xử lý ngắt, bộ xử lý sẽ lấy lại địa chỉ lệnh cần thực thi tiếp theo đã được lưu vào ngăn xếp trước đó và tiếp tục công việc vừa bỏ dở.

Do đó, trong chương trình sẽ không có lệnh gọi chương trình con xử lý ngắt.

Thân,
cảm ơn anh!em cũng đã đọc về ngắt trong hướng dẫn sử dụng của mikroE nhưng họ nói ít quá anh ạ!em muốn tìm hiểu kĩ hơn thì phải đọc tài liệu nào vậy anh!Giúp em với nhé!
doremino vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2008, 07:16 AM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi doremino View Post
cảm ơn anh!em cũng đã đọc về ngắt trong hướng dẫn sử dụng của mikroE nhưng họ nói ít quá anh ạ!em muốn tìm hiểu kĩ hơn thì phải đọc tài liệu nào vậy anh!Giúp em với nhé!
Tôi trả lời cho post này và post bên luồng "PIC16F877A từ dễ đến khó" mà bạn vừa gửi lên luôn.

Để tìm hiểu kỹ về cách xử lý ngắt của một vi điều khiển, tốt nhất là chúng ta đọc datasheet của vi điều khiển đó, chẳng hạn datasheet của PIC16F887, link để download dưới đây:
http://ww1.microchip.com/downloads/e...Doc/41291E.pdf

Tuy nhiên, thông tin trong datasheet được cung cấp cho những người có một kiến thức nền về vi điều khiển tương đối tốt, để dùng như tài liệu tra cứu. Với những người mới làm quen với vi điều khiển PIC, hãng Microchip có những seminar về các chuyên mục cụ thể hơn, cho mặt bằng kiến thức phổ thông hơn. Rất tiếc hiện nay tôi không thể tìm thấy các presentation về các khối chức năng của dòng Mid-range nữa.

Về ngắt ngoài mà bạn đã hỏi bên luồng "PIC16F877A từ dễ đến khó", có một số chân của PIC có thể được dùng để phát hiện sự thay đổi mức logic ở các chân đó, và có thể dùng nó để nhận biết nút nhấn nối vào chân nào đó đã được nhấn.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2008, 10:49 AM   #8
doremino
Đệ tử 3 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 48
:
Post

Trích:
Nguyên văn bởi namqn View Post
Tôi trả lời cho post này và post bên luồng "PIC16F877A từ dễ đến khó" mà bạn vừa gửi lên luôn.

Để tìm hiểu kỹ về cách xử lý ngắt của một vi điều khiển, tốt nhất là chúng ta đọc datasheet của vi điều khiển đó, chẳng hạn datasheet của PIC16F887, link để download dưới đây:
http://ww1.microchip.com/downloads/e...Doc/41291E.pdf

Tuy nhiên, thông tin trong datasheet được cung cấp cho những người có một kiến thức nền về vi điều khiển tương đối tốt, để dùng như tài liệu tra cứu. Với những người mới làm quen với vi điều khiển PIC, hãng Microchip có những seminar về các chuyên mục cụ thể hơn, cho mặt bằng kiến thức phổ thông hơn. Rất tiếc hiện nay tôi không thể tìm thấy các presentation về các khối chức năng của dòng Mid-range nữa.

Về ngắt ngoài mà bạn đã hỏi bên luồng "PIC16F877A từ dễ đến khó", có một số chân của PIC có thể được dùng để phát hiện sự thay đổi mức logic ở các chân đó, và có thể dùng nó để nhận biết nút nhấn nối vào chân nào đó đã được nhấn.

Thân,
vậy để có kiến thức nền tốt về vi điều khiển thì em phải bắt đầu như thế nào?Anh chỉ em luôn nha, em có theo dõi luồng "PIC16F877A từ dễ đến khó" nhưng hình như anh Chính mod của luồng đó hình như nghỉ mất rồi anh ạ!tiếc quá!!
!!
doremino vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2012, 11:23 PM   #9
naughtyboy2088
Nhập môn đệ tử
 
Tham gia ngày: Jul 2012
Bài gửi: 1
:
#include <maina.h>

#include <stdio.h>
#include <string.h>



void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

// TODO: USER CODE!!
output_high(PIN_C2);
output_high(PIN_C3);

while(1)
{
if(input(PIN_A1))
output_low(PIN_C2);
else output_high(PIN_C2);

if(input_state(PIN_A0))
output_high(PIN_C3);
else output_low(PIN_C3);

}



}
Cho em hỏi giờ em muốn viết thêm uart(RS232)truyền nhận qua cổng C6/TX -C7/TX thì viết thế nào. Em đang học mò.
naughtyboy2088 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:53 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam